【问题标题】:Azure AD B2C REST API string or datetime output to custom policy with date claim type throws errorAzure AD B2C REST API 字符串或日期时间输出到具有日期声明类型的自定义策略引发错误
【发布时间】:2020-05-19 12:07:12
【问题描述】:

我需要获取用户的出生日期以仅使用日期(没有时间)进行注册 - 场景 1。

但是在同一策略中的另一个场景流中,我有一个 URL 参数(一个令牌),我将使用它调用一个 REST API 并从另一个应用程序获取用户信息。在这种情况下,我编写了 REST API 来获取第三方数据并返回到 b2c 自定义策略。

我创建了一个数据类型为“日期”的出生日期声明,它适用于场景 1,它通过自断言输入从用户那里获取出生日期。

 <ClaimType Id="dateOfBirth">
        <DisplayName>Date of Birth</DisplayName>
        <DataType>date</DataType>
        <DefaultPartnerClaimTypes>
          <Protocol Name="OAuth2" PartnerClaimType="birth_date" />
          <Protocol Name="OpenIdConnect" PartnerClaimType="birth_date" />
          <Protocol Name="SAML2"     PartnerClaimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/birthdate" />
        </DefaultPartnerClaimTypes>
        <UserInputType>DateTimeDropdown</UserInputType>
        <PredicateValidationReference Id="CustomDateRange" />
      </ClaimType>

但对于场景 2,REST API 只能以 DateTime 或字符串的形式返回。当我尝试执行 REST API 将 dateOfBirth 作为字符串返回的策略时,当 REST API 返回值时,B2C 会引发错误 - 在 AppInsights 中我看到:

id 为“dateOfBirth”的声明的数据类型“String”与策略中指定的 ID 为“dateOfBirth”的 ClaimType 的数据类型“Date”不匹配

如果我将 REST API dateOfBirth 更改为 DateTime,那么它会抛出如下:

ID 为“dateOfBirth”的声明的数据类型“DateTime”与策略中指定的 ID 为“dateOfBirth”的 ClaimType 的数据类型“Date”不匹配

有人可以帮忙吗?

提前致谢。

【问题讨论】:

  • 对我来说也一样。 @Logu 找到解决方案了吗?

标签: rest datetime types azure-ad-b2c


【解决方案1】:

在调用 api 的技术配置文件中,您需要添加 输出声明转换,将您的日期时间转换为日期。下面的示例假定您的 api 在输出声明中返回 dateOfBirthWithTime,然后将其转换为 dateOfBirth:

<ClaimType Id="dateOfBirth">
    <DataType>date</DataType>
    <UserInputType>DateTimeDropdown</UserInputType>
</ClaimType>
<ClaimType Id="dateOfBirthWithTime">
    <DataType>dateTime</DataType>
    <UserInputType>Readonly</UserInputType>
</ClaimType>
      
<ClaimsTransformation Id="ConvertDateOfBirthWithTimeToDate" TransformationMethod="ConvertDateTimeToDateClaim">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="dateOfBirthWithTime" TransformationClaimType="inputClaim" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="dateOfBirth" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>

<OutputClaims>
    <OutputClaim ClaimTypeReferenceId="dateOfBirthWithTime" Required="false" />
</OutputClaims>
<OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="ConvertDateOfBirthWithTimeToDate" />
</OutputClaimsTransformations>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多