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
我有一个使用 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