【问题标题】:Update Display Name in Azure B2C custom policy更新 Azure B2C 自定义策略中的显示名称
【发布时间】:2018-11-16 07:09:52
【问题描述】:

我们正在尝试使用声明转换更新自定义 Azure B2C 策略中的显示名称,但我们无法使其正常工作。策略执行没有错误,但显示名称没有更新。

我们不希望用户输入显示名称。

here 回答了类似的问题,但解决方案中提供的转换在上传到 Azure 时未通过验证。

这是我们正在使用的更新后的转换:

  <ClaimsTransformation Id="CreateDisplayNameFromFirstNameAndLastName" TransformationMethod="FormatStringMultipleClaims">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="inputClaim1" />
      <InputClaim ClaimTypeReferenceId="surname" TransformationClaimType="inputClaim2" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="stringFormat" DataType="string" Value="{0} {1}" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>

有一个样本使用了上述转换here

【问题讨论】:

  • 您是如何调用此声明转换的?即来自哪个技术配置文件?作为输入或输出声明转换?

标签: azure-ad-b2c


【解决方案1】:

您发布的转换是正确的。所以我假设你没有按正确的顺序使用它。

您已写道,您不希望您的用户设置显示名称。因此,您只需在实际将用户详细信息写入 Active Directory 的技术配置文件中引入转换。

举例:

    <TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
      <Metadata>
        <Item Key="Operation">Write</Item>
        <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
      </Metadata>
      <IncludeInSso>false</IncludeInSso>

      <!-- Transform optional claims (given name, surname) to proper display name -->
      <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="CreateDisplayNameFromFirstNameAndLastName" />
      </InputClaimsTransformations>

      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" Required="true" />
      </InputClaims>

      <PersistedClaims>
        <!-- Required claims -->
        <PersistedClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />
        <PersistedClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password"/>
        <PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown" />
        <PersistedClaim ClaimTypeReferenceId="passwordPolicies" DefaultValue="DisablePasswordExpiration" />

        <!-- Optional claims. -->
        <PersistedClaim ClaimTypeReferenceId="givenName" />
        <PersistedClaim ClaimTypeReferenceId="surname" />
      </PersistedClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId" />
        <OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated" />
        <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
        <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
        <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
      </OutputClaims>
      <IncludeTechnicalProfile ReferenceId="AAD-Common" />
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
    </TechnicalProfile>

现在转换采用可选的名称声明,并在(输入转换)值写入目录之前创建正确的显示名称。如果既没有设置名字也没有设置姓氏,则将使用回退值(未知)。字典上的任何读取操作(登录等)都将返回一次性转换的显示名称。

但是,您可以调整用于收集此信息的技术配置文件(例如 LocalAccountSignUpWithLogonEmail)以要求这些字段的值。

 ...
 <OutputClaim ClaimTypeReferenceId="givenName" Required="true" />
 <OutputClaim ClaimTypeReferenceId="surName" Required="true" />

【讨论】:

    猜你喜欢
    • 2021-02-12
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2019-08-20
    • 2018-12-07
    相关资源
    最近更新 更多