Keycloak与Spring Boot授权服务器:userinfo端点客户端认证方式疑问
问题解答
这是预期行为
你遇到的情况属于规范和框架实现的预期结果,并非配置遗漏。
为什么userinfo端点不采用请求参数传递客户端凭证?
规范安全导向
OAuth2与OIDC规范中,client_secret_post主要是针对token端点的令牌请求场景设计的。对于userinfo这类资源型端点,规范更推荐使用HTTP Basic认证(即把client_id:client_secret做Base64编码后放在AuthorizationHeader中)。原因在于请求参数存在被日志、缓存或代理意外记录泄露的风险,而Header方式的安全性更高,也是HTTP标准认证方案,兼容性更强。框架实现逻辑差异
Spring Boot授权服务器和Keycloak对不同端点的认证逻辑做了区分:token端点专门处理令牌申请,会严格遵循client_secret_post配置,接收请求体中的客户端凭证。userinfo端点作为资源端点,核心是验证用户的访问令牌,同时验证客户端身份时,框架默认采用更安全的HTTP Basic认证方式,和token端点的凭证传递逻辑相互独立。
是否需要调整配置?
如果一定要让userinfo端点支持请求参数传递客户端凭证,需要自定义Spring Security过滤器链,为userinfo端点添加解析请求体中client_id和client_secret的认证逻辑。但从安全和规范角度,不建议这么做,保持当前的Header认证方式更合理。
内容的提问来源于stack exchange,提问作者Usman Sajid
相关产品推荐
相关产品推荐

