Seb*_*jko 6 azure-ad-b2c identity-experience-framework
我正在寻找一种方法来向emails
Azure AD B2C的自定义策略添加声明(电子邮件集合).此应用程序声明可直接从Azure门户获得,但我找不到在我需要创建的自定义策略中实现此方法的方法.
我想要实现的是为我的WebApp用户提供Azure AD B2C身份验证,为员工提供Azure AD身份验证作为自定义身份验证提供程序,这意味着我需要emails
为本地帐户和Azure AD 添加两次声明.
我按照本指南制作自定义策略,因此我添加了一个新ClaimsProvider
的TrustFrameworkExtensions.xml文件.
当我下载在Azure门户中创建的注册和登录策略时,我可以看到以下输出声明:
<OutputClaim ClaimTypeReferenceId="emails" />
Run Code Online (Sandbox Code Playgroud)
我试图将该行添加到我的自定义策略中,但它不会返回emails
声明.
有任何想法吗?
我采用了更简单的方法,只是在SignInSignUp.xml 中添加了以下输出声明(我保留了现有的电子邮件输出声明,无论如何只会为社交登录填充)
<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />
Run Code Online (Sandbox Code Playgroud)
我也找不到答案-看来自定义OutputClaimsTransformation返回了“电子邮件”声明,该示例的配置不可用。
我确实在SO上找到了这个答案,但有帮助,但是它涵盖了针对新用户的“ otherMails”声明的更新,并且我已有无法以这种方式更新的基本策略的现有用户。
似乎通过将“ otherMails”(在社交注册的情况下)与“ signInNames”数组中的第一个条目连接起来来填充电子邮件。
我最终做了以下操作来动态创建“电子邮件”声明。
在TrustFrameworkExtensions.xml中创建两个新的ClaimTypes
<ClaimType Id="emails">
<DisplayName>Emails</DisplayName>
<DataType>stringCollection</DataType>
<UserHelpText>User's email addresses</UserHelpText>
</ClaimType>
<ClaimType Id="firstOtherMail">
<DisplayName>First Other mail</DisplayName>
<DataType>string</DataType>
<UserHelpText>Other Mail</UserHelpText>
</ClaimType>
Run Code Online (Sandbox Code Playgroud)
在TrustFrameworkExtensions.xml中创建3个新的ClaimsTransformations
<ClaimsTransformation Id="GetFirstOtherMail" TransformationMethod="GetSingleItemFromStringCollection">
<InputClaims>
<InputClaim ClaimTypeReferenceId="otherMails" TransformationClaimType="collection" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="firstOtherMail" TransformationClaimType="extractedItem" />
</OutputClaims>
</ClaimsTransformation>
<ClaimsTransformation Id="CopyFirstOtherMailToEmail" TransformationMethod="AddItemToStringCollection">
<InputClaims>
<InputClaim ClaimTypeReferenceId="firstOtherMail" TransformationClaimType="item" />
<InputClaim ClaimTypeReferenceId="emails" TransformationClaimType="collection" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="emails" TransformationClaimType="collection" />
</OutputClaims>
</ClaimsTransformation>
<ClaimsTransformation Id="CopySignInNamesEmailToEmails" TransformationMethod="AddItemToStringCollection">
<InputClaims>
<InputClaim ClaimTypeReferenceId="signInNames.emailAddress" TransformationClaimType="item" />
<InputClaim ClaimTypeReferenceId="emails" TransformationClaimType="collection" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="emails" TransformationClaimType="collection" />
</OutputClaims>
</ClaimsTransformation>
Run Code Online (Sandbox Code Playgroud)
在TrustFrameworkExtensions.xml中创建一个新的TechnicalProfile:
<!-- The following technical profile is used to create the emails collection after user authenticates. -->
<TechnicalProfile Id="AAD-UserCreateEmailsClaim">
<Metadata>
<Item Key="Operation">Read</Item>
<Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
</Metadata>
<IncludeInSso>false</IncludeInSso>
<InputClaims>
<InputClaim ClaimTypeReferenceId="objectId" Required="true" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="emails" />
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="GetFirstOtherMail"/>
<OutputClaimsTransformation ReferenceId="CopySignInNamesEmailToEmails"/>
<OutputClaimsTransformation ReferenceId="CopyFirstOtherMailToEmail"/>
</OutputClaimsTransformations>
<IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)
在SignUpOrSignIn中的最后一步(SendClaims)之前,将新的OrchestrationStep添加到SignUpOrSignIn UserJourney中
<OrchestrationStep Order="8" Type="ClaimsExchange">
<ClaimsExchanges>
<!-- create the emails claim combining signInNames and otherMails -->
<ClaimsExchange Id="AADUserCreateEmailsClaim" TechnicalProfileReferenceId="AAD-UserCreateEmailsClaim" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="9" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
Run Code Online (Sandbox Code Playgroud)
编辑PolicyProfile TechnicalProfile并添加OutputClaim:
<OutputClaim ClaimTypeReferenceId="emails" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1784 次 |
最近记录: |