如何使用 HRD 自定义策略保留电子邮件、名字和姓氏

How to persist email, first and last names with HRD custom policy

我在测试目录中的 https://github.com/azure-ad-b2c/samples/blob/master/policies/home-realm-discovery-modern/policy/SignIn_smart_HRD.xml 运行 处有一个 CP 的修改版本,我们公司的 AD 作为 IdP 联合。当我尝试使用我的 AD 电子邮件地址登录应用程序并且 B2C 目录中不存在我的帐户时,它会在 OrchestrationStep 8 中使用 UserWriteUsingAlternativeSecurityId 创建它。但是,新用户帐户只有一个显示名称;没有 fname,没有 lname,最糟糕的是,没有电子邮件 。我如何确保这些元素在该步骤中持久存在?我不知道如何“抓住”它们。

理想情况下,我希望联合身份 自动 链接到具有相同电子邮件地址的现有本地帐户,而无需用户进行本地登录。我看到的关于帐户链接的所有示例都涉及用户首先使用本地密码帐户登录或预先填充用户的 OID。我只有新用户的电子邮件地址。

-GBS

您通过将这些声明映射为您的身份提供商技术配置文件中的输出声明来“抓住”这些声明。

默认情况下,根据 this 保留以下声明:

          <PersistedClaims>
            <!-- Required claims -->
            <PersistedClaim ClaimTypeReferenceId="alternativeSecurityId" />
            <PersistedClaim ClaimTypeReferenceId="userPrincipalName" />
            <PersistedClaim ClaimTypeReferenceId="mailNickName" DefaultValue="unknown" />
            <PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown" />

            <!-- Optional claims -->
            <PersistedClaim ClaimTypeReferenceId="otherMails" />
            <PersistedClaim ClaimTypeReferenceId="givenName" />
            <PersistedClaim ClaimTypeReferenceId="surname" />
          </PersistedClaims>

因此,在您的身份提供者技术资料中,您需要将声明映射到上述声明名称中,例如:

        <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
        <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" />

在这里,来自 Idp 令牌的 family_name 映射到声明名称、姓氏。然后稍后在 WriteUsingAlternativeSecurityId 技术配置文件中保留。

您可以将 IdP 电子邮件声明映射到 mailNickName。或者添加到扩展属性中并将其添加为持久声明。

如果您想要自动关联帐户: https://github.com/azure-ad-b2c/samples/blob/master/policies/auto-account-linking

为防止要求用户在执行帐户链接时证明他们拥有该帐户,请删除 HandleLinkLocalToSocial 子旅程中的步骤 1-7(含)。