身份体验框架和社交账户
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
并使用 ClaimsTransformation
从 otherMails
获取值,但未设置该字段。
这行不通:
<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。
我制定了一项政策,允许使用用户名和密码(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
并使用 ClaimsTransformation
从 otherMails
获取值,但未设置该字段。
这行不通:
<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。