AAD B2C-缺少访问令牌中的Upn声明

时间:2020-08-26 16:08:07

标签: azure azure-ad-b2c msal

我有一个Angular应用程序,该应用程序已使用AAD B2C进行了身份验证。这将使用访问令牌与.Net Core API进行通信。

我的问题是我没有在访问令牌中收到用户主体名称(upn)。

我一直在添加其他“应用程序声明”,例如“给定名称”和“姓氏”,这些都很好地出现在我的访问令牌中!因此,我认为我的范围(openid,个人资料,电子邮件)设置正确,并且理论上可以正常工作。

我相信,因为我使用的是令牌的1.0版,所以不需要在应用程序清单中配置任何其他声明。我的用户是标准AD用户,不是来宾。

以下文档指出upn声明应包含在v1.0令牌中: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-optional-claims

我在做什么错?!

解码访问令牌:

{
  "iss": "https://(my-tenant-name).b2clogin.com/(guid)/v2.0/",
  "exp": (number),
  "nbf": (number),
  "aud": "(guid)",
  "oid": "(guid)",
  "sub": "(guid)",
  "name": "My Name",
  "given_name": "Given name",
  "family_name": "Surname",
  "country": "Norge",
  "tfp": "B2C_1_signupsignin2",
  "nonce": "(guid)",
  "scp": "basic",
  "azp": "(guid)",
  "ver": "1.0",
  "iat": (number)
}

3 个答案:

答案 0 :(得分:0)

根据您提供的代码,我们观察到您正在使用v2端点(“ iss”:“ https://(my-tenant-name).b2clogin.com /(guid)/v2.0/”) 根据{{​​3}},如果您看到iss:If the token was issued by the v2.0 endpoint, the URI will end in /v2.0.

在V2端点中,您需要明确地提出UPN声明请求。

在v1.0端点中,默认情况下会返回它们,但v2.0产生了较小的令牌,因此将其设为可选。

请通过以下链接获取更多信息。 document如何在应用清单https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-optional-claims中添加可选声明

答案 1 :(得分:0)

目前,同时支持个人帐户和Azure AD(通过应用程序注册门户注册)的应用程序不能使用可选声明。但是,仅使用v2.0终结点为Azure AD注册的应用程序可以获得清单中请求的可选声明。

要在令牌中实现UPN声明,请使用B2C自定义策略。 请参考以下链接以获取入门包:https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack

在技术档案 AAD-UserReadUsingObjectId 和依赖方策略(例如: SignUpOrSignin.xml )中添加以下声明:

<OutputClaim ClaimTypeReferenceId="userPrincipalName" />

答案 2 :(得分:0)

UPN不会以AAD B2C令牌返回,因为它是设置的无关字符串。

AAD B2C的唯一名称存储在signInNames属性中,并以电子邮件或用户名的形式返回给您。

您链接的文档是针对AAD的,与AAD B2C无关。这是两个单独的令牌发行者服务。在“用户流应用程序声明”中选择以返回“电子邮件地址”。

https://docs.microsoft.com/en-us/azure/active-directory-b2c/user-flow-overview#email-address-storage