我正在使用带有SocialAndLocalAccounts包的自定义策略入门包。对我来说很好。但我面临一个问题,我需要得到电子邮件作为索赔后,成功登录。我得到的电子邮件作为索赔,一旦用户已注册并立即重定向回应用程序。但是当用户简单地登录时,我不会得到它。我怎么才能得到呢?我需要在哪里写一个OutputClaim来获取claim中email的值?请帮帮我。谢谢
mkh04yzy1#
对于Chris Padgett的答案,您可以将其他电子邮件(备用电子邮件)添加到声明中。如果您只想将电子邮件声明从登录名称添加到令牌中,您只需执行以下步骤:1.打开SignUporSignIn.xml文件1.将<OutputClaim ClaimTypeReferenceId="email" />替换为<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />1.保存此SignUporSignIn.xml文件并将其上载到Azure AD B2C以覆盖策略。1.运行SignUporSignIn策略对其进行测试。下面是我的测试结果,你可以在令牌中看到电子邮件声明:
SignUporSignIn.xml
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />
希望这能帮上忙。
qvk1mo1f2#
下面介绍如何通过注册/登录和密码重置策略将otherMails声明作为email发出。编写本地帐户时:您必须使用CreateOtherMailsFromEmail声明转换,从email声明创建otherMails声明,然后将otherMails声明保存在AAD-UserWriteUsingLogonEmail技术配置文件中:
<TechnicalProfile Id="AAD-UserWriteUsingLogonEmail"> ... <IncludeInSso>false</IncludeInSso> <InputClaimsTransformations> <InputClaimsTransformation ReferenceId="CreateOtherMailsFromEmail" /> </InputClaimsTransformations> <InputClaims> ... </InputClaims> <PersistedClaims> ... <PersistedClaim ClaimTypeReferenceId="otherMails" /> </PersistedClaims> <OutputClaims> ... <OutputClaim ClaimTypeReferenceId="otherMails" /> </OutputClaims> ... </TechnicalProfile>
然后,您必须从注册本地帐户时调用的LocalAccountSignUpWithLogonEmail技术配置文件中传递otherMail声明:
<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail"> ... <OutputClaims> ... <OutputClaim ClaimTypeReferenceId="otherMails" /> </OutputClaims> </TechnicalProfile>
当编写社交帐户时:* * otherMails声明已经从email声明创建,并在AAD-UserWriteUsingAlternativeSecurityId技术配置文件中持久化。然后,您必须将otherMails声明从注册社交账号时调用的SelfAsserted-Social**技术配置文件中传递出来:
<TechnicalProfile Id="SelfAsserted-Social"> ... <OutputClaims> ... <OutputClaim ClaimTypeReferenceId="otherMails" /> </OutputClaims> </TechnicalProfile>
阅读本地或社交帐户时:在AAD-UserReadUsingObjectId、AAD-UserReadUsingEmailAddress和AAD-UserReadUsingAlternativeSecurityId技术配置文件中已读取otherMail声明。然后,您必须从LocalAccountDiscoveryUsingEmailAddress技术配置文件中传递otherMail声明,该技术配置文件用于恢复本地密码:
<TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress"> ... <OutputClaims> ... <OutputClaim ClaimTypeReferenceId="otherMails" /> </OutputClaims> </TechnicalProfile>
根据注册/登录和密码重置策略,将otherMails声明为电子邮件:您必须将otherMails声明作为<OutputClaim />添加到依赖方策略中:
<OutputClaim />
<RelyingParty> ... <TechnicalProfile Id="PolicyProfile"> <OutputClaims> ... <OutputClaim ClaimTypeReferenceId="otherMails" PartnerClaimType="emails" /> </OutputClaims> </TechnicalProfile> </RelyingParty>
ef1yzkbh3#
另一个适合我的选择是扩展AAD-UserReadUsingObjectId,以便将signInNames.emailAddress声明复制到email中。这使得登录与我们的其他旅程/子旅程保持一致,以实现集成的注册、密码重置和社交登录--在第一次登录/注册期间,每个旅程/子旅程都会填充email。我所需要做的就是将它添加到TrustFrameworkExtension.xml(在<ClaimsProviders>下):
AAD-UserReadUsingObjectId
signInNames.emailAddress
email
TrustFrameworkExtension.xml
<ClaimsProviders>
<ClaimsProvider> <DisplayName>Azure Active Directory</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="AAD-UserReadUsingObjectId"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" /> </OutputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
j91ykkif4#
您需要考虑本地帐户和社交帐户不同的电子邮件输出,因为B2C存储这些电子邮件相关的属性不同.以下是我的解决方案:1.对于本地帐户,添加到AAD-UserReadUsingObjectId TP中,例如:
<TechnicalProfiles> <TechnicalProfile Id="AAD-UserReadUsingObjectId"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress"/> </OutputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
1.对于社交帐户,添加一个索赔转换TP,用于额外的索赔交换用户旅程步骤,以将电子邮件发送到索赔袋。例如:
<ClaimsTransformation Id="CreateEmailFromOtherMails" TransformationMethod="GetSingleItemFromStringCollection"> <InputClaims> <InputClaim ClaimTypeReferenceId="otherMails" TransformationClaimType="collection" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="email" TransformationClaimType="extractedItem" /> </OutputClaims </ClaimsTransformation>
https://learn.microsoft.com/en-us/azure/active-directory-b2c/stringcollection-transformations#example-of-getsingleitemfromstringcollection
4条答案
按热度按时间mkh04yzy1#
对于Chris Padgett的答案,您可以将其他电子邮件(备用电子邮件)添加到声明中。
如果您只想将电子邮件声明从登录名称添加到令牌中,您只需执行以下步骤:
1.打开
SignUporSignIn.xml
文件1.将
<OutputClaim ClaimTypeReferenceId="email" />
替换为<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />
1.保存此SignUporSignIn.xml文件并将其上载到Azure AD B2C以覆盖策略。
1.运行SignUporSignIn策略对其进行测试。下面是我的测试结果,你可以在令牌中看到电子邮件声明:
希望这能帮上忙。
qvk1mo1f2#
下面介绍如何通过注册/登录和密码重置策略将otherMails声明作为email发出。
编写本地帐户时:您必须使用CreateOtherMailsFromEmail声明转换,从email声明创建otherMails声明,然后将otherMails声明保存在AAD-UserWriteUsingLogonEmail技术配置文件中:
然后,您必须从注册本地帐户时调用的LocalAccountSignUpWithLogonEmail技术配置文件中传递otherMail声明:
当编写社交帐户时:* * otherMails声明已经从email声明创建,并在AAD-UserWriteUsingAlternativeSecurityId技术配置文件中持久化。
然后,您必须将otherMails声明从注册社交账号时调用的SelfAsserted-Social**技术配置文件中传递出来:
阅读本地或社交帐户时:在AAD-UserReadUsingObjectId、AAD-UserReadUsingEmailAddress和AAD-UserReadUsingAlternativeSecurityId技术配置文件中已读取otherMail声明。
然后,您必须从LocalAccountDiscoveryUsingEmailAddress技术配置文件中传递otherMail声明,该技术配置文件用于恢复本地密码:
根据注册/登录和密码重置策略,将otherMails声明为电子邮件:您必须将otherMails声明作为
<OutputClaim />
添加到依赖方策略中:ef1yzkbh3#
另一个适合我的选择是扩展
AAD-UserReadUsingObjectId
,以便将signInNames.emailAddress
声明复制到email
中。这使得登录与我们的其他旅程/子旅程保持一致,以实现集成的注册、密码重置和社交登录--在第一次登录/注册期间,每个旅程/子旅程都会填充email
。我所需要做的就是将它添加到
TrustFrameworkExtension.xml
(在<ClaimsProviders>
下):j91ykkif4#
您需要考虑本地帐户和社交帐户不同的电子邮件输出,因为B2C存储这些电子邮件相关的属性不同.以下是我的解决方案:
1.对于本地帐户,添加到AAD-UserReadUsingObjectId TP中,例如:
1.对于社交帐户,添加一个索赔转换TP,用于额外的索赔交换用户旅程步骤,以将电子邮件发送到索赔袋。
例如:
https://learn.microsoft.com/en-us/azure/active-directory-b2c/stringcollection-transformations#example-of-getsingleitemfromstringcollection