对于 Azure B2C,有没有办法通过声明发送用户主体名称?

For Azure B2C, is there a way to send the user principal name via claims?

我在将当前登录用户的用户名从 Azure b2c 获取到我的 Blazor Web 应用时遇到了一些问题。本质上,我想创建一个用户名帐户,其中用户名是用户主体名称。我最初使用的是将显示名称作为用户名的电子邮件注册策略。但是,b2c 并不强制显示名称是唯一的,因此存在一个固有的问题。没有返回带有用户名的声明,因此我无法在我的 Blazor 应用程序中密切关注谁已登录或显示他们的用户名。我可以做一些选择,我很好奇哪一个最容易 implement/how 实现它,因为过去几个小时我一直在用这个来解决问题。

提前致谢!

如果您需要任何额外的声明,您需要输入您的 Azure AD BC 租户并从您的 [=] 配置 Application Claims 36=]用户流,在下面的例子中用户流被调用B2C_1_signupsignin:

如您所见,上面的示例列出了所有 other 可用声明,因为圆顶声明 always 返回,作为用户名。

您可以配置用于在 Identity Provider 中登录的声明(模式):

您收到的索赔如下:

但是如您所见,没有任何 userPrincipalNamesigninNames
这是 Azure AD B2C 中的一个已知问题,在用户流清单中包含此声明不起作用。
我找到的唯一解决方案是上传您的自定义策略并添加:
<OutputClaim ClaimTypeReferenceId = "signInName" />

但这仅适用于 本地帐户
如果您还想为外部(社交)帐户添加登录名,您需要映射它们,例如:
<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="upn" />

在此处查看基础资源 XML:
https://github.com/azure-ad-b2c/samples/tree/master/policies/sign-up-with-social-and-local-account

您需要使用自定义策略:https://aka.ms/ief。用户名未 return 包含在用户流令牌中。

使用自定义策略,您可以使用用户名和 return 他们的用户名(signInNames.username 属性,在 Azure 门户中显示为 userPrincipalName)注册用户到令牌中。

您可以使用我的工具 here. And quick deploy the username sample using this page 示例文件夹名称 username-signup-or-signin.

快速部署自定义策略