Azure B2C - 无法从策略中的 JWT 客户端断言令牌读取“日期”声明
Posted
技术标签:
【中文标题】Azure B2C - 无法从策略中的 JWT 客户端断言令牌读取“日期”声明【英文标题】:Azure B2C - Not able to read "Date" Claim from JWT client assertion token in policy 【发布时间】:2019-10-27 22:16:45 【问题描述】:我无法从 JWT 客户端断言令牌中读取日期声明,然后通过转换方法“ConvertDateToDateTimeClaim”转换为“日期时间”声明。我在索赔中尝试了以下日期格式,但没有一个有效。当我在 B2C 策略中设置日期声明的默认值时,它可以例外地工作。
JWT 令牌: "createdDate1": "2019-05-26", "createdDate2": "2019-05-26T00:00:00", "createdDate3": "2019-05-26T00:00:00Z", "verifiedEmail": "xxxxxxxxxxxxxxx", “nbf”:1560005928, “exp”:1560006228, "iss": "xxxxxxxxxxxxxxxxxxxx", “审计”:“xxxxxxxxxxxxxxxxxxxxx”
错误:ID 为“createdDate”的声明的数据类型“字符串”与策略中指定的 ID 为“createdDate”的 ClaimType 的数据类型“日期”不匹配。
B2C Policy
需要帮助。
【问题讨论】:
嗨@Jeeva。如果日期声明设置为 NumericDate,即从 1970-01-01T00:00:00Z UTC 到创建时间 UTC 的秒数,如exp
声明?
@ChrisPadgett 嗨,我尝试从 idTokenHint 参数中的 JWT 读取声明。也没有工作。还没有找到正确读取日期时间的方法。
【参考方案1】:
尝试从 id_token_hint 参数中的 JWT 读取 dateTime 声明时出现错误。这周修好了。我可以想象它与日期声明相同。
我创建了一个具有以下声明的 JWT:
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
new System.Security.Claims.Claim("LinkExpirationDateTime", ((long)(DateTime.UtcNow.AddMinutes(_appSettings.LinkExpiresAfterMinutes) - unixEpoch).TotalSeconds).ToString(), System.Security.Claims.ClaimValueTypes.DateTime, issuer)
您可以像https://github.com/azure-ad-b2c/samples/ 上的一些示例中所示那样阅读它(例如“电子邮件传递的帐户兑换链接”)。 ClaimType 是:
<ClaimType Id="LinkExpirationDateTime">
<DisplayName>LinkExpirationDateTime</DisplayName>
<DataType>dateTime</DataType>
</ClaimType>
【讨论】:
以上是关于Azure B2C - 无法从策略中的 JWT 客户端断言令牌读取“日期”声明的主要内容,如果未能解决你的问题,请参考以下文章
仅验证从 Azure B2C AD 生成的 JWT 令牌的签名 [重复]
Azure AD B2C - 自定义策略中的“电子邮件”声明