当我使用自定义策略时,如何获得Azure AD B2C的内置声明在令牌中返回?

时间:2018-07-31 18:05:53

标签: azure azure-ad-b2c identity-experience-framework

一段时间以来,我一直在使用内置的SignUpOrSignIn策略,但是现在我转向了自定义策略。

设置内置策略时,我可以从内置应用程序声明列表中进行选择(例如displayNamejobTitle),然后选择我想成为的声明用户登录时返回令牌。

现在,我正在设置自定义策略,我想做同样的事情,但是我无法使其正常工作。

到目前为止,在TrustFrameworkBase中,我添加了ClaimType中的jobTitle

<ClaimType Id="jobTitle">
    <DisplayName>Job Title</DisplayName>
    <DataType>string</DataType>
    <UserHelpText>Job title.</UserHelpText>
</ClaimType>

我已将以下OutputClaim添加到ID为TechnicalProfile的{​​{1}}:

login-NonInteractive

并且我已将以下<OutputClaim ClaimTypeReferenceId="jobTitle" PartnerClaimType="jobTitle" /> 添加到ID为OutputClaim的{​​{1}}:

TechnicalProfile

但是SelfAsserted-LocalAccountSignin-Email声明并未与令牌中的其他声明一起通过。我已经为<OutputClaim ClaimTypeReferenceId="jobTitle" /> 做过同样的事情,而且确实可行。如果我将第一个jobTitle更改为:

given_name

然后通过OutputClaim声明,但带有<OutputClaim ClaimTypeReferenceId="jobTitle" PartnerClaimType="given_name" /> 声明的值。这意味着我只是使用了错误的jobTitle,但似乎在任何地方都没有它们的列表。

当用户使用其本地B2C帐户登录时,如何获得内置的职位名称属性作为令牌中的声明返回?

1 个答案:

答案 0 :(得分:1)

如果您只想为用户阅读 jobTitle 声明(或其他声明),然后在令牌中发出它(或它们),则您必须:

1)声明 jobTitle 声明:

<ClaimType Id="jobTitle">
  <DisplayName>Job Title</DisplayName>
  <DataType>string</DataType>
  <DefaultPartnerClaimTypes>
    <Protocol Name="OAuth2" PartnerClaimType="job_title" />
    <Protocol Name="OpenIdConnect" PartnerClaimType="job_title" />
  </DefaultPartnerClaimTypes>
</ClaimType>

2)将 jobTitle 声明作为输出声明添加到 AAD-UserReadUsingObjectId 技术资料:

<TechnicalProfile Id="AAD-UserReadUsingObjectId">
  ...
  <OutputClaims>
    ...
    <OutputClaim ClaimTypeReferenceId="jobTitle" />
  </OutputClaims>
  ...
</TechnicalProfile>

3)将 jobTitle 声明作为输出声明添加到依赖方技术资料中:

<RelyingParty>
  ...
  <TechnicalProfile Id="PolicyProfile">
    ...
    <OutputClaims>
      ...
      <OutputClaim ClaimTypeReferenceId="jobTitle" />
    </OutputClaims>
    ...
  </TechnicalProfile>
</RelyingParty>