Azure B2C通过OIDC集成Okta Org授权服务器遇签名验证失败问题
问题描述
我正在使用Azure B2C自定义策略为应用提供联合登录功能,目前已支持微软(MS)和Google作为身份提供商,现尝试通过OpenID Connect(OIDC)集成Okta。此前在Okta开发者实例中使用Okta自定义授权服务器时,集成B2C策略一切正常。但合作客户没有自定义授权服务器的授权许可,且该许可成本高昂,因此希望集成Okta免费提供的默认Org授权服务器。
然而Okta Org授权服务器不支持令牌验证,Okta官方文档也对此有说明。尝试登录时,B2C报错:
"IDX10503: Signature validation failed. Token does not have a kid."
请问能否从B2C端关闭签名验证?比如在OpenIdConnect技术配置文件中使用未公开的元数据设置?
解决方案说明
Azure B2C自定义策略不支持关闭OIDC身份提供商的令牌签名验证,这是出于安全合规的硬性要求——签名验证是OIDC协议的核心安全机制,B2C强制要求验证所有来自外部身份提供商的令牌完整性与真实性。
针对Okta Org授权服务器的问题,可尝试以下替代方案:
- 切换使用Okta的ID令牌:Okta Org授权服务器的ID令牌包含
kid字段且支持标准签名验证。在B2C的OpenID Connect技术配置文件中,调整令牌获取逻辑,优先用ID令牌完成身份断言,而非访问令牌。 - 配置正确的JWKS端点:确保B2C技术配置文件的
Metadata节点中,正确指定Okta Org授权服务器的JWKS端点(格式通常为https://<你的Okta域名>/oauth2/v1/keys),让B2C能获取到合法的签名密钥。 - 检查请求参数配置:确认OIDC技术配置文件的
response_type设置为id_token或code id_token,避免仅请求token;同时scope必须包含openid,这是获取有效ID令牌的必要条件。
需注意,Okta Org授权服务器的访问令牌确实不包含kid且不支持验证,因此必须切换到ID令牌才能完成B2C的身份验证流程。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

