在 B2C 自定义策略中复制 dateTime 声明

时间:2021-07-12 09:49:32

标签: azure-ad-b2c

在 B2C 自定义策略中,我将 dateTime 值存储在扩展属性中。在用户登录时更新原始值之前,我需要将此属性中的值复制到另一个属性中。这样我们就可以显示“您上次登录应用程序的时间:dd-mmm-yyyy。”

因此我需要存储用户上次登录的日期时间。第一步,我通过存储当前登录的日期时间来完成,但我需要在覆盖之前将此值复制到第二个属性中带有此登录日期时间的原件。

但是,在 B2C 自定义策略中检查可用声明转换列表时,似乎无法执行此操作:https://docs.microsoft.com/en-us/azure/active-directory-b2c/general-transformations,因为 CopyClaim 转换仅适用于字符串和整数。日期的可用转换列表有限。

我能看到解决这个问题的唯一可能方法是调用一个 rest api,在那里我从原始属性中传入值,然后返回与 api 输出完全相同的值,然后存储它其他属性中的值。

这似乎太过分了,只是将一个值从一个属性复制到另一个属性。有没有更简单的方法?

1 个答案:

答案 0 :(得分:2)

为什么不为此使用不同的逻辑。

  1. 创建两个属性:[Date]extension_currentLoginTime 和 [Date]extension_lastLoginTime

  2. 当用户注册或首次登录时,使用 GenerateDateTime 声明转换并将 currentTime 声明写入 extension_currentLoginTimeextension_lastLoginTime

  3. extension_lastLoginTime 返回到令牌中

  4. 当用户执行登录时,读取 extension_currentLoginTime 并将其保存到 extension_lastLoginTime

    以下代码段显示了如何将一个声明的内容写入到任何属性。 这意味着,您无需先复制声明。

    <PersistedClaims>
      <PersistedClaim ClaimTypeReferenceId="extension_currentLoginTime" PartnerClaimType="extension_lastLoginTime"/>
    </PersistedClaims>
    
  5. 使用 GenerateDateTime 声明转换并将 currentTime 声明写入 extension_currentLoginTime