【发布时间】:2020-02-08 09:17:26
【问题描述】:
我正在使用 Spring Boot 2.1.1.RELEASE (spring-security-oauth2-2.3.4.RELEASE)。
我想在TokenEndpoint#postAccessToken 调用之后创建一个优先过滤器。为什么 ?因为在该过滤器中,我想从tokenStore 中获取令牌并将其作为 cookie 添加到响应中。
我希望,这会给我想要的:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.(...)
.addFilterAfter(new MyFilter(), BasicAuthenticationFilter.class);
}
但事实并非如此。我可以看到,BasicAuthenticationFilter 在oauth/token 上成功验证后被调用,但它没有进入我的MyFilter。
在oauth/token 调用之后,我应该怎么做才能调用MyFilter?
您想从授权服务器或资源服务器设置 cookie? 您的身份验证服务器和资源服务器是否都在同一上下文中?或不同的应用程序。?
我有两个微服务。第一个是授权服务器,它提供 jwt 令牌(由其私钥签名)。第二个微服务是一个资源服务器,它根据授权服务器公钥验证令牌(由 Auth 服务器通过 REST 端点公开)
你想在收到授权服务器的access_token后设置吗? >你想通过设置cookie做什么?
没有。当前端应用程序进行oauth/token 调用时,我希望授权服务器设置一个cookie。这样浏览器负责为每个请求添加一个令牌,而不是我的前端应用程序。这可以保护我免受 XSS 攻击,因为 cookie 将设置为 httpOnly 和 secure。
您的计划是读取 cookie 以获取 access_token 吗?
正确。但这应该由资源服务器完成(还没有这样做)
简单的方法是为相同的功能创建一个 API。它将 access_token 作为请求参数并设置 cookie。
您是否建议在前端应用程序和身份验证/资源服务器之间建立代理微服务?将 jwt 令牌设置为 cookie 并从 cookie 中读取令牌的代理微服务?
【问题讨论】:
-
简单的方法是为相同的功能创建一个 API。它将 access_token 作为请求参数并设置 cookie。
-
如果你能解释你的要求,那就太好了。您想从授权服务器或资源服务器设置 cookie?是否要在从授权服务器收到 access_token 后进行设置?您的身份验证服务器和资源服务器是否都在同一上下文中?或不同的应用程序。?你想通过设置cookie做什么?您的计划是读取 cookie 以获取 access_token 吗?如果你用你的方法更新问题,它将帮助大多数访问者。
-
你是怎么解决这个问题的?我想达到同样的效果吗? @user3529850
标签: java spring spring-boot spring-security spring-security-oauth2