Azure Ad b2c:在azure ad b2c中成功登录后在索赔中获取电子邮件

6pp0gazn  于 2023-06-24  发布在  其他
关注(0)|答案(4)|浏览(185)

我正在使用带有SocialAndLocalAccounts包的自定义策略入门包。
对我来说很好。
但我面临一个问题,我需要得到电子邮件作为索赔后,成功登录。我得到的电子邮件作为索赔,一旦用户已注册并立即重定向回应用程序。
但是当用户简单地登录时,我不会得到它。
我怎么才能得到呢?我需要在哪里写一个OutputClaim来获取claim中email的值?
请帮帮我。谢谢

mkh04yzy

mkh04yzy1#

对于Chris Padgett的答案,您可以将其他电子邮件(备用电子邮件)添加到声明中。
如果您只想将电子邮件声明从登录名称添加到令牌中,您只需执行以下步骤:
1.打开SignUporSignIn.xml文件
1.将<OutputClaim ClaimTypeReferenceId="email" />替换为<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />
1.保存此SignUporSignIn.xml文件并将其上载到Azure AD B2C以覆盖策略。
1.运行SignUporSignIn策略对其进行测试。下面是我的测试结果,你可以在令牌中看到电子邮件声明:

希望这能帮上忙。

qvk1mo1f

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-UserReadUsingObjectIdAAD-UserReadUsingEmailAddressAAD-UserReadUsingAlternativeSecurityId技术配置文件中已读取otherMail声明。
然后,您必须从LocalAccountDiscoveryUsingEmailAddress技术配置文件中传递otherMail声明,该技术配置文件用于恢复本地密码:

<TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">
    ...
    <OutputClaims>
        ...
        <OutputClaim ClaimTypeReferenceId="otherMails" />
    </OutputClaims>
</TechnicalProfile>

根据注册/登录和密码重置策略,将otherMails声明为电子邮件:您必须将otherMails声明作为<OutputClaim />添加到依赖方策略中:

<RelyingParty>
    ...
    <TechnicalProfile Id="PolicyProfile">
        <OutputClaims>
            ...
            <OutputClaim ClaimTypeReferenceId="otherMails" PartnerClaimType="emails" />
        </OutputClaims>
    </TechnicalProfile>
</RelyingParty>
ef1yzkbh

ef1yzkbh3#

另一个适合我的选择是扩展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>
j91ykkif

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

相关问题