使用Azure B2C自定义策略获取userPrinciaplName

时间:2020-07-09 05:31:14

标签: azure azure-ad-b2c

我正在使用Azure B2C自定义策略来使用带有OpenId Connect的Azure AD对用户进行身份验证。为此,我遵循了Set up sign-in with an Azure AD account by using custom policies - Azure AD B2C中提到的步骤。该文档中提供的所有信息似乎都可以正常工作。

除了jwt令牌中提供的信息外,我还需要userPrincipalName(user@tenant.net)。我需要使用UPN,因为并非所有用户在租户中都有电子邮件。因此,当我在输出声明中添加userPrincipalName时,我在令牌中的输出下方。

“ upn”:“ cpim_xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx@mytenant.onmicrosoft.com”

我想知道是否可以通过user@tenant.net而不是如上所述的方式获取userPrincipalName的值。

如果可行,如何实现?

1 个答案:

答案 0 :(得分:0)

否,因为目录中的用户具有找到的UPN,格式为cpim_xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx@mytenant.onmicrosoft.com

这是因为您无法验证其他人的域名是否能够使用非mytenant.onmicrosoft.com的域名填充UPN。

存储电子邮件或通过IdP传递电子邮件。如果IdP提供了不通过电子邮件的选项,例如Facebook同意流程,则可以在注册时强制收集/验证电子邮件。
https://github.com/azure-ad-b2c/samples/tree/master/policies/social-idp-force-email

从Azure AD中,所有用户都将返回一个unique_name声明,该声明是其Azure AD中的UPN。您也可以依靠它。如果您依赖AAD的电子邮件声明,则只有在用户具有Exchange Online收件箱的情况下,该声明才会出现。

通常,Azure AD中的UPN和电子邮件相同。因此,您可以在AAD technical profile中添加以下输出声明以捕获AAD UPN:

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

然后在依赖方部分中,添加以下输出声明:

<OutputClaim ClaimTypeReferenceId="aadUPN" PartnerClaimType="UPNfromAAD"/>