Azure AD B2C 在自定义策略中将声明添加到 id_token

Azure AD B2C Add Claims to id_token in custom policy

我已经根据 Active Directory B2C custom policy starter pack 社交和本地帐户的示例创建了社交和本地帐户的自定义策略。我已经启用了 Microsoft 和 Google 的登录并测试了两者是否有效,我还启用了使用本地帐户登录。

当我 log in with google 我得到以下声明时

exp,nbf,ver,iss,sub,aud,acr,nonce,iat,auth_time,email,given_name,family_name,name,idp,at_hash

当我登录 custom Azure AD tenant 时,声明集丢失 'email',但电子邮件列在 'name' 声明中

exp,nbf,ver,iss,sub,aud,acr,nonce,iat,auth_time,given_name,family_name, name,idp,at_hash

当我以本地帐户登录时,声明集丢失了 'email' 并且任何字段中都没有列出电子邮件。

exp,nbf,ver,iss,sub,aud,acr,nonce,iat,auth_time,given_name, family_name,name,at_hash

最后,当我查看 B2C 管理员中的用户列表时,这些都是不同的用户条目...即使电子邮件地址相同。所以我有 2 个问题,

  1. 如何在 id_token
  2. 中获得一致的声明集
  3. 如何在注册时link所有这些帐户(相同的 UPN)

我相信这些可能是相关的,这就是为什么我把它们放在一起问的原因。 您可能想查看策略,但我向您保证它们与入门包中的策略完全相同,我所做的只是更改租户名称并在信任框架扩展文件中添加 google 和 azure .

对于 Azure AD 电子邮件声明,将以下内容<OutputClaim /> 添加到 Azure AD OpenID Connect 技术配置文件中:

<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="unique_name" />

对于本地帐户电子邮件声明,将以下内容 <OutputClaim /> 添加到 AAD-UserReadUsingObjectId 技术配置文件中:

<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />