Azure B2C自定义策略对接KeyCloak SSO出现CryptographicKeys验证错误
解决步骤
你的报错来自两个配置错误,按如下修改即可解决:
1. 修正XML节点顺序
Azure B2C自定义策略的XML Schema对TechnicalProfile下的子节点顺序有严格要求,CryptographicKeys节点必须放在InputClaims节点之后、OutputClaims节点之前,你当前的配置把CryptographicKeys放在了OutputClaims之后,不符合架构要求,因此触发校验报错。
2. 修正Policy Key用途配置
你当前把存储客户端密钥的Policy Key用途设为了Signature,该用途仅适用于令牌签名场景,OpenID连接身份提供商的客户端密钥属于身份验证机密,用途必须选择Secret,否则后续运行时会触发鉴权错误。
修正后的完整ClaimsProvider配置
<ClaimsProvider> <Domain>mydomain.com</Domain> <DisplayName>SSO</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="SSO-KK-OpenID"> <DisplayName>My SSO</DisplayName> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="ProviderName">https://mydomainurl.com</Item> <Item Key="METADATA">https://mydomainurl.com/auth/realms/myrealm/.well-known/openid-configuration</Item> <Item Key="response_types">code</Item> <Item Key="response_mode">form_post</Item> <Item Key="scope">openid</Item> <Item Key="HttpBinding">POST</Item> <Item Key="UsePolicyInRedirectUri">false</Item> <Item Key="client_id">myclientIdOnKeyCloak</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="domain_hint" DefaultValue="pippo" /> </InputClaims> <!-- 已调整CryptographicKeys到InputClaims之后、OutputClaims之前 --> <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_MYKKSecret" /> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="https://mydomainurl.com" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" /> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="email" /> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" /> <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name" /> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" /> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" /> </OutputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
后续操作步骤
- 进入Azure B2C门户的「Identity Experience Framework」-「Policy keys」页面,删除原有
B2C_1A_MYKKSecret密钥 - 重新创建密钥,「选项」选择
Manual,「名称」保持为MYKKSecret(生成的完整ID会自动带B2C_1A_前缀),「用途」选择Secret,填入你KeyCloak侧的客户端秘钥后保存 - 重新上传修改后的策略文件即可通过校验
内容的提问来源于stack exchange,提问作者Luca Riccitelli
相关产品推荐
相关产品推荐

