使用 CreateSubjectClaimFromAlternativeSecurityId 时,在声明子中使用 Azure B2C 时出现错误消息:“当前不支持。使用 oid 声明。”

Jon*_*ved 5 azure azure-ad-b2c

使用 LinkedIn 作为具有 Identity Experience Framework 的社交提供商登录时,声明sub有时会在声明值中返回以下错误消息:

"Not supported currently. Use oid claim."
Run Code Online (Sandbox Code Playgroud)

该错误似乎是随机出现的,而不是在每个请求上出现。在https://jwt.ms中检查时,我们的测试帐户获得了正确的索赔子

在 Application Insights 中检查 UserJourneyRecorder 的日志文件时,发现了错误消息并追溯到我们的应用程序。

在策略文件中,错误似乎源自声明转换器CreateSubjectClaimFromAlternativeSecurityId

<ClaimsTransformation Id="CreateSubjectClaimFromAlternativeSecurityId" TransformationMethod="CreateStringClaim">
 <InputParameters>
  <InputParameter Id="value" DataType="string" Value="Not supported currently. Use oid claim." />
 </InputParameters>
 <OutputClaims>
   <OutputClaim ClaimTypeReferenceId="sub" TransformationClaimType="createdClaim" />
  </OutputClaims>
</ClaimsTransformation>
Run Code Online (Sandbox Code Playgroud)

我认为 Azure AD B2C 应该在此处抛出异常,而不是在单个声明中给出错误消息?

Chr*_*ett 3

如果您已阅读“ Azure Active Directory B2C:使用自定义策略将 LinkedIn 添加为身份提供商”一文,则可以<OutputClaimsTransformation />从“LinkedIn-OAUTH”技术配置文件中删除:

<OutputClaimsTransformations>
  <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
  <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
  <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
  <!-- REMOVE THE FOLLOWING LINE -->
  <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" />
</OutputClaimsTransformations>
Run Code Online (Sandbox Code Playgroud)

如果您使用的是自定义策略入门包之一,则应将“子”声明设置为依赖方策略文件中用户对象的对象标识符:

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="OpenIdConnect" />
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="displayName" />
      <OutputClaim ClaimTypeReferenceId="givenName" />
      <OutputClaim ClaimTypeReferenceId="surname" />
      <OutputClaim ClaimTypeReferenceId="email" />
      <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
      <OutputClaim ClaimTypeReferenceId="identityProvider" />
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub" />
  </TechnicalProfile>
</RelyingParty>
Run Code Online (Sandbox Code Playgroud)