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

AAD B2C - Missing upn claim in access token

我有一个使用 AAD B2C 进行身份验证的 Angular 应用程序。这与使用访问令牌的 .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)
}

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

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

在 v1.0 端点中,它们默认返回,但 v2.0 制作了更小的标记,因此它们将其设为可选。

请通过以下链接了解更多信息。 https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-optional-claims How to add optional claims in application manifest https://docs.microsoft.com/en-us/azure/active-directory/develop/reference-app-manifest

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

要在令牌中实现 UPN 声明,请使用 B2C 自定义策略。 请参阅此 link 的入门包:https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack

将以下声明添加到 TechnicalProfile AAD-UserReadUsingObjectId 和依赖方策略中(例如:SignUpOrSignin.xml ):

<OutputClaim ClaimTypeReferenceId="userPrincipalName" />

UPN 未在 AAD B2C 令牌中 return 编辑,因为它是设置的不相关的随机字符串。

相反,AAD B2C 的唯一名称存储在 signInNames 属性中,并return作为电子邮件或用户名输入您的令牌。

您链接的文档适用于 AAD,与 AAD B2C 无关。这是两个独立的令牌发行者服务。 Select 在您的用户流程应用程序中声明 return“电子邮件地址”。

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