身份体验框架和社交账户

Identity Experience Framework and social accounts

我制定了一项政策,允许使用用户名和密码(B2C 用户)或使用 Microsoft 帐户登录,将 AD 连接为 OpenId 身份提供商。它工作正常,但是当我使用我的 Microsoft 帐户登录时,电子邮件未设置:

我想我必须在以下代码段中设置一些内容:

<TechnicalProfile Id="AAD-UserWriteUsingAlternativeSecurityId">
    <Metadata>
        <Item Key="Operation">Write</Item>
        <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
        <Item Key="UserMessageIfClaimsPrincipalAlreadyExists">You are already registered, please press the back button and sign in instead.</Item>
    </Metadata>
    <IncludeInSso>false</IncludeInSso>
    <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="CreateOtherMailsFromEmail" />
    </InputClaimsTransformations>
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="AlternativeSecurityId" PartnerClaimType="alternativeSecurityId" Required="true" />
    </InputClaims>
    <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>
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId" />
        <OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated" />
        <OutputClaim ClaimTypeReferenceId="otherMails" />
    </OutputClaims>
    <IncludeTechnicalProfile ReferenceId="AAD-Common" />
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>

我试图将 <PersistedClaim ClaimTypeReferenceId="email"/> 添加到 PersistedClaims,但我收到错误请求消息:指定的一个或多个 属性 值无效。

this 页面上,我看到正确的定义是 mail。我还尝试定义一个新的 ClaimType 并使用 ClaimsTransformationotherMails 获取值,但未设置该字段。

这行不通:

<PersistedClaim ClaimTypeReferenceId="email"/>

因为在名为“email”的用户对象上没有这样的属性。

你能做的是:

<PersistedClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress"/>

这将显示在 Azure 门户中的 userPrincipalName 下。这也意味着用户无法使用该电子邮件注册本地帐户,实际上您创建了一个“dual/linked 帐户”,尽管没有密码。 然后用户需要重置此帐户的密码才能使用用户名和密码访问它,例如,如果他们删除了他们在 Facebook 的社交帐户。

另一种选择是写入 otherMails

<PersistedClaim ClaimTypeReferenceId="email" PartnerClaimType="otherMails"/>

这可能需要是一个数组,所以在写入之前先使用 claimTransform 构建一个数组。

请勿将电子邮件写入 mail 属性,B2C 帐户支持的属性为 here