Azure B2C自定义策略SAML集成报错issuerUserId缺失如何解决
错误根因
CreateAlternativeSecurityId 声明转换逻辑要求必须传入issuerUserId声明作为入参,但B2C上下文执行到该转换时没有找到对应的声明值,因此触发执行失败,返回SAML responder状态错误。
解决方案
可按以下优先级尝试修复:
添加Keycloak到B2C的用户ID映射
找到你配置Keycloak作为外部IDP的<ClaimsProvider>节点,在其<OutputClaims>子节点中添加如下映射配置:<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />OIDC协议标准中
sub字段为身份提供方返回的用户唯一标识,Keycloak默认会返回该字段,上述配置会将Keycloak返回的用户ID赋值给B2C上下文的issuerUserId声明。确认
issuerUserId声明已定义
检查你的自定义策略扩展文件的<ClaimsSchema>节点,确保已经定义了该声明类型,示例配置如下:<ClaimType Id="issuerUserId"> <DisplayName>外部身份提供方下发的用户ID</DisplayName> <DataType>string</DataType> </ClaimType>检查声明传递链路
核对用户旅程的编排步骤,确保在执行CreateAlternativeSecurityId转换的步骤之前,issuerUserId声明已经被正确获取,没有被步骤的声明过滤规则剔除。移除不需要的声明转换
如果你的业务场景不需要用到AlternativeSecurityId声明(无需将外部用户ID同步存储到B2C目录、返回给Spring应用的SAML断言也不需要该值),可以直接删除<OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>配置项即可消除报错。
内容的提问来源于stack exchange,提问作者Luca Riccitelli

