Azure B2C用户流中如何将ISO8601格式字符串声明按字符串处理?
解决Azure B2C用户流中ISO8601字符串声明的类型转换问题
Azure B2C的API连接器会自动根据返回值内容推断数据类型,ISO8601格式的字符串会被识别为DateTime类型,和你定义的String类型声明冲突,导致报错AADB2C99072。无需使用自定义策略的话,可通过以下两种方案解决:
方案1:修改API返回格式,避免自动类型推断
通过调整返回的字符串格式,让B2C无法识别为DateTime类型:
- 添加标识前缀/后缀:在ISO8601字符串前后添加非日期格式的内容,比如返回
"DATE:2023-05-09T00:15:00.0000000Z"。B2C会将其视为普通字符串存储,后续在应用端使用时去掉前缀即可。 - Base64编码:将日期字符串转换为Base64编码后返回,例如
"MjAyMy0wNS0wOVQwMDoxNTowMC4wMDAwMDAwWg=="。存储后需在应用端解码还原原始日期字符串。
方案2:调整声明和属性的类型为DateTime
如果业务允许将该值作为DateTime类型处理:
- 在Azure B2C门户的用户属性中,将目标自定义属性的类型修改为
DateTime。 - 在用户流的自定义声明设置里,把对应声明的类型也改为
DateTime。
这样API返回的ISO8601字符串会被正确识别为DateTime类型,不会触发类型不匹配错误。后续若需字符串格式,可在应用端自行转换。
内容的提问来源于stack exchange,提问作者Cory M
相关产品推荐
相关产品推荐

