Tej*_*ngh 3 azure azure-ad-b2c
我正在将自定义策略的入门包与SocialAndLocalAccounts包一起使用。
对我来说很好。
但是我面临一个问题。成功登录后,我需要获得电子邮件作为声明。我已经收到电子邮件声明,一旦用户已注册并立即重定向回应用程序。
但是当用户只是登录时我没有收到。
我该怎么办?我需要在哪里编写输出声明以获取声明中电子邮件的价值?
请帮助我。谢谢
下面介绍了如何保存、加载,然后将otherMails声明作为来自注册/登录和密码重置策略的电子邮件发出。
编写本地帐户时:您必须使用CreateOtherMailsFromEmail声明转换从电子邮件声明创建otherMails声明,然后在AAD-UserWriteUsingLogonEmail技术配置文件中保留otherMails声明:
<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>
Run Code Online (Sandbox Code Playgroud)
然后,您必须从LocalAccountSignUpWithLogonEmail技术配置文件中传递otherMails声明,该技术配置文件被调用以注册本地帐户:
<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
...
<OutputClaims>
...
<OutputClaim ClaimTypeReferenceId="otherMails" />
</OutputClaims>
</TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)
编写社交帐户时:otherMails声明已根据电子邮件声明创建,然后保留在AAD-UserWriteUsingAlternativeSecurityId技术配置文件中。
然后,您必须从SelfAsserted-Social技术配置文件中传递otherMails声明,该配置文件被调用以注册社交帐户:
<TechnicalProfile Id="SelfAsserted-Social">
...
<OutputClaims>
...
<OutputClaim ClaimTypeReferenceId="otherMails" />
</OutputClaims>
</TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)
读取本地或社交帐户时:otherMails声明已在AAD-UserReadUsingObjectId、AAD-UserReadUsingEmailAddress和AAD-UserReadUsingAlternativeSecurityId技术配置文件中读取。
然后,您必须从LocalAccountDiscoveryUsingEmailAddress技术配置文件中传递otherMails声明,该技术配置文件被调用以恢复本地密码:
<TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">
...
<OutputClaims>
...
<OutputClaim ClaimTypeReferenceId="otherMails" />
</OutputClaims>
</TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)
要将otherMails声明作为来自注册/登录和密码重置策略的电子邮件发出:您必须将otherMails声明添加<OutputClaim />到依赖方策略:
<RelyingParty>
...
<TechnicalProfile Id="PolicyProfile">
<OutputClaims>
...
<OutputClaim ClaimTypeReferenceId="otherMails" PartnerClaimType="emails" />
</OutputClaims>
</TechnicalProfile>
</RelyingParty>
Run Code Online (Sandbox Code Playgroud)
对于Chris Padgett的答案,您可以在声明中添加其他电子邮件(备用电子邮件)。
如果您只想将登录名中的电子邮件声明添加到令牌中,则可以执行以下步骤:
打开你的SignUporSignIn.xml文件
替换<OutputClaim ClaimTypeReferenceId="email" />为<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />
保存此SignUporSignIn.xml文件,并将其上传到Azure AD B2C以覆盖该策略。
希望这可以帮助。
对我有用的另一个选择是扩展,AAD-UserReadUsingObjectId以便将signInNames.emailAddress声明复制到email. 这使得登录与我们的其他旅程/子旅程保持一致,以进行集成注册、密码重置和社交登录——这些都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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |