gpt4 book ai didi

azure-ad-b2c - Azure AD B2C-自定义策略中的 "emails"声明

转载 作者:行者123 更新时间:2023-12-04 12:04:10 32 4
gpt4 key购买 nike

我正在寻找一种将emails声明(电子邮件集合)添加到Azure AD B2C的自定义策略中的方法。该应用程序声明可直接从Azure门户获得,但是我找不到在我需要创建的自定义策略中实现此方法的方法。

我要实现的目标是为WebApp用户提供Azure AD B2C身份验证,并为员工提供自定义身份验证提供程序作为Azure身份验证提供者,因此这意味着我需要为本地帐户和Azure AD添加两次emails声明。

我遵循了this guide to make custom policy,因此向TrustFrameworkExtensions.xml文件添加了一个新的ClaimsProvider

当我下载在Azure Portal中创建的“注册并登录”策略时,可以看到以下输出声明:

<OutputClaim ClaimTypeReferenceId="emails" />

我试图将该行放入我的自定义策略中,但没有返回 emails声明。

有任何想法吗?

最佳答案

我也找不到答案-好像是自定义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>

在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>

在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>

在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" />

编辑PolicyProfile TechnicalProfile并添加OutputClaim:
 <OutputClaim ClaimTypeReferenceId="emails" />

关于azure-ad-b2c - Azure AD B2C-自定义策略中的 "emails"声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46778129/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com