我有一个带有 API 连接器的用户流。我正在使用“发送令牌之前” https://learn.microsoft.com/en-us/azure/active-directory-b2c/api-connectors-overview?pivots=b2c-user-flow#before-sending-the-token-previewapi 连接器来检索我的数据库中的用户角色,然后将其作为 extension_Role 在令牌中发送回。
当我进行正常流程时,一切正常,对我来说是:
这工作正常,因为在注册时我手动输入电子邮件,在登录时我也手动输入电子邮件。在这两种情况下,我的 C# 后端 api 连接器都会收到电子邮件声明。
当我使用相同的用户流程但激活了 SSO 访问另一个网站时,问题就变得棘手了。这意味着它不会触发我再次输入我的凭据,但它会尝试让我在后台登录。当它这样做时,我仍然调用我的 C# 后端,但这次没有电子邮件。这是收到的 JSON:
{
"step":"PreTokenIssuance",
"client_id":"HIDDEN FOR SECURITY",
"ui_locales":"en-US",
"objectId":"HIDDEN FOR SECURITY",
"surname":"HIDDEN FOR SECURITY",
"displayName":"HIDDEN FOR SECURITY",
"givenName":"HIDDEN FOR SECURITY"
}
我想知道为什么我没有电子邮件。
There are the application claims and user claims on my user flow:
如果此问题没有真正的解决方案,则可以创建一个名为“AutomaticEmail”的新自定义字段,并在注册时使用用户电子邮件填充此字段。这会起作用,但我认为这是一个愚蠢的解决方案,因为已经有用于此目的的现场电子邮件,如果用户出于某种原因更改电子邮件,将会出现很多问题。
• 这是因为当您登录另一个网站时,该网站是不受信任的域,即使通过 SSO 进行身份验证后后端 C# json 文件中的声明被隐藏,收到的令牌中的声明输出也会被加密,而电子邮件声明属性会被加密。省略,而其他声明属性仍然存在于接收到的令牌中,即使被隐藏/加密。
• 因此,电子邮件声明属性可能会在json 文件中返回null,因为该属性在列中的值可能丢失或未知。因此,当元素为 null 时,将省略与电子邮件属性相关的键值对并返回与 Azure AD B2C 声明数据类型相对应的值。因此,由于电子邮件声明属性是字符串类型,因此它返回空字符串“”,就像在收到的身份验证令牌中看不到电子邮件属性一样。
• 另外,将以下声明添加到自定义策略输出声明中,以便您能够将电子邮件作为响应令牌中的属性获取,因为您的自定义策略可能允许您通过多个属性声明类型进行注册/登录,并且您可能使用电子邮件以外的其他索赔类型时,不会收到电子邮件索赔。
<!-- This was already here -->
<OutputClaim ClaimTypeReferenceId="email" />
<!-- Added claim -->
<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress"
PartnerClaimType="email" />
请找到下面的链接,其中解释了用于扩展和自定义用户注册流程的 API 连接器以及返回空值的处理:-
https://learn.microsoft.com/en-us/azure/active-directory-b2c/api-connectors-overview?pivots=b2c-custom-policy https://learn.microsoft.com/en-us/azure/active-directory-b2c/api-connectors-overview?pivots=b2c-custom-policy
https://learn.microsoft.com/en-us/answers/questions/406952/email-claim-sometimes-missing-in-b2c-tokens.html https://learn.microsoft.com/en-us/answers/questions/406952/email-claim-sometimes-missing-in-b2c-tokens.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)