首页 > 解决方案 > 在客户端授权请求触发之前将 Oauth2 范围(Keycloak 实现)添加到请求标头(Sring boot + Keycloak)

问题描述

我使用 keycloak 作为身份验证服务器,我的客户端应用程序是具有 keycloak 客户端适配器依赖项的 sring-boot 应用程序。

我尚未解决的一个挑战是在授权请求执行之前在请求标头上插入特定范围(朝向身份验证服务器 - keycloak 身份验证端点)。

现在我已经通过 curl 和/或 postman 测试了我的端点(使用具有有限功能的访问令牌),它们的行为符合预期,所以我知道它们可以工作。但是我不知道在使用 Spring Boot 时何时/如何将它们附加为“范围”请求标头(主要是因为这是在 Spring Boot 引擎盖下运行的所有管道代码)。

我假设我需要使用某种拦截器/过滤器来让我在“执行”之前访问该请求对象,但我找不到具体的例子。

任何建议/指导或指向相关文档将不胜感激。

提前致谢。

更新:

自从我上一篇文章以来;我已经测试了几种组合来实现这一点,遗憾的是没有一个有效,令人惊讶的是,像在授权请求上注入作用域这样的 oAuth2 基本功能,Spring Boot Keycloak 适配器不能轻易支持开箱即用。我尝试了以下方法:

1 - 使用 Sping "ClientHttpRequestInterceptor" 的自定义实现。这无济于事,因为此拦截器提供对前端通道请求(或通过前端控制器到达应用程序的请求)的访问,它不提供对后端通道请求(其中 auth-request 是其中的一部分)的访问的)。

2 - “ClientHttpRequestInterceptor”通常也与“RestTemplate”自定义实现结合使用。这里的问题是,这仅适用于通过 RestTemplate 的实例执行的那些请求,而这不是 spring-adapter 使用的反向通道请求所发生的情况

3 - 使用基于 springsecurity 的配置对象。spring-security 为配置组件提供了有用的过滤器,可以在这里提供帮助(@Configuration、@EnableWebSecurity、@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class OR @KeycloakConfiguration);这种全局配置类型基本上将您的 spring boot keycloak 适配器应用程序与 springsecurity 代码混合在一起,虽然这在大多数情况下都可以正常工作,但如果您碰巧使用/需要“策略”(通过使用“keycloak.policy-enforcer-config”类型的配置),那么您的策略将停止工作,并且会出现一系列新问题会出现。

来自:https : //oauth.net/2/scope/OAuth Scopes tools.ietf.org/html/rfc6479#section-3.3

范围是 OAuth 2.0 中的一种机制,用于限制应用程序对用户帐户的访问。应用程序可以请求一个或多个范围,然后在同意屏幕中将此信息呈现给用户,并且颁发给应用程序的访问令牌将仅限于授予的范围。

OAuth 规范允许授权服务器或用户修改授予应用程序的范围(与请求的范围相比),尽管在实践中这样做的服务示例并不多。

OAuth 没有为范围定义任何特定值,因为它高度依赖于服务的内部架构和需求。

明确指出,应用程序可以请求范围以接收具有有限访问权限的令牌,但是使用 keyclock 适配器(尤其是 spring boot)实现这一点的所有在线文档几乎(完全?)不存在。

一些redhat的keycloak专家可以提供建议吗?

标签: javaspring-bootoauth-2.0keycloak

解决方案


推荐阅读