gpt4 book ai didi

azure - 是否可以使用身份体验框架通过使用发行人的声明来自动更新 B2C 用户详细信息?

转载 作者:行者123 更新时间:2023-12-03 02:14:47 24 4
gpt4 key购买 nike

我已按照 B2C tutorial docs 为应用程序创建了策略。它成功在 B2C 租户中创建用户,填写来自任何/所有发行者的名字..电子邮件等 - 目前,其他任何 Azure 租户都可以登录到此 B2C 租户,这是必需的。

但是,如果原始发行人的对象的详细信息发生变化(例如名称更改)怎么办?目前,除非用户按照流程(手动)编辑自己的个人资料,否则会出现不匹配的情况。

是否可以创建一个旅程,在对象存在于 B2C 租户中之后向发行者请求 claim ,然后使用新的详细信息更新本地用户?

我希望实现的结果是,如果在 B2C 用户进行身份验证时原始帐户已以某种方式进行了编辑,则自动更新 B2C 租户用户。这样,链接到 B2C 租户的应用程序就可以发送更新的声明。

我理解这个前提,但我缺乏的是关于我在旅程中需要哪些步骤以及这些步骤是什么样子的知识。如果有人可以分享一个示例,甚至只是从原始发行者处读取名称并将其复制到 B2C 租户用户,那么这对我来说将非常有用。

[编辑]感谢Jas提供详细的解决方案!我通过简单地将 AAD-UserReadUsingObjectId 和 AAD-UserWriteUsingAlternativeSecurityId 步骤添加到注册登录旅程的末尾来解决此问题。每次登录时,它都会使用原始对象的声明更新 B2C 用户对象,并且满足要求,因为它更新了 B2C 租户并将更新后的属性传递给也需要它们的应用程序。

最佳答案

OpenId technical profile 中的输出声明允许您将从 IdP 传入的声明映射到 AAD B2C 声明包中。

让我们使用监视 IdP 上的 displayName 是否已更改的示例。

<OutputClaims>
<OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="live.com" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
<OutputClaim ClaimTypeReferenceId="displayNameFromIdp" PartnerClaimType="name" />
<OutputClaim ClaimTypeReferenceId="email" />
</OutputClaims>

然后我们使用 AAD-ReadUsingAlternativeSecurityId 读取用户, 默认情况下。请参阅此处的输出声明,如下所示,这将读取 B2C 目录中已存在的用户的 displayName。

          <OutputClaims>
<!-- Required claims -->
<OutputClaim ClaimTypeReferenceId="objectId" />

<!-- Optional claims -->
<OutputClaim ClaimTypeReferenceId="userPrincipalName" />
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="otherMails" />
<OutputClaim ClaimTypeReferenceId="givenName" />
<OutputClaim ClaimTypeReferenceId="surname" />
<OutputClaim ClaimTypeReferenceId="identityChanged" DefaultValue="false"/>
</OutputClaims>

现在,我们使用 CompareClaims claim transform 比较 displayNamedisplayNameFromIdp 值。 .

<ClaimsTransformation Id="CompareDisplayName" TransformationMethod="CompareClaims">
<InputClaims>
<InputClaim ClaimTypeReferenceId="displayNameFromIdp" TransformationClaimType="inputClaim1" />
<InputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="inputClaim2" />
</InputClaims>
<InputParameters>
<InputParameter Id="operator" DataType="string" Value="NOT EQUAL" />
<InputParameter Id="ignoreCase" DataType="boolean" Value="true" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="identityChanged" TransformationClaimType="outputClaim" />
</OutputClaims>
</ClaimsTransformation>

为您要检查的每个声明进行如下声明转换。仅更改 inputClaims,因此如果有任何更改,它始终会在 identityChanged 声明中反射(reflect)为 bool 值。

将此 ClaimTransform 作为输出声明转换添加到 AAD-ReadUsingAlternativeSecurityId:

          <OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="CompareDisplayName" />
</OutputClaimsTransformations>

对于您创建的每个声明转换,对于您想要保持同步的每个属性,添加引用声明转换 ID 的输出声明转换。

现在,如果 identityChanged == true,我们就知道调用 AAD Write 技术配置文件。在您的旅程中,在 AAD-UserReadUsingAlternativeSecurityId 之后(读取用户之后)和 AAD-UserWriteUsingAlternativeSecurityId (创建用户之后)之后的某个时刻添加一个步骤。 p>

        <OrchestrationStep Order="NUMBER" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="true">
<Value>identityChanged</Value>
<Value>false</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="AADUserUpdate" TechnicalProfileReferenceId="AAD-UserUpdateUsingAlternativeSecurityId" />
</ClaimsExchanges>
</OrchestrationStep>

定义 Azure AD technical profile更新用户:

        <TechnicalProfile Id="AAD-UserUpdateUsingAlternativeSecurityId">
<Metadata>
<Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">false</Item>
</Metadata>
<PersistedClaims>
<PersistedClaim ClaimTypeReferenceId="alternativeSecurityId" />
</PersistedClaims>
<IncludeTechnicalProfile ReferenceId="AAD-UserWriteUsingAlternativeSecurityId" />
<UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>

定义声明identityChangeddisplayNameFromIdp:

      <ClaimType Id="identityChanged">
<DisplayName>identityChanged</DisplayName>
<DataType>boolean</DataType>
</ClaimType>
<ClaimType Id="displayNameFromIdp">
<DisplayName>displayNameFromIdp</DisplayName>
<DataType>string</DataType>
</ClaimType>

关于azure - 是否可以使用身份体验框架通过使用发行人的声明来自动更新 B2C 用户详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71831955/

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