代码之家  ›  专栏  ›  技术社区  ›  ionutt93

Spring boot security oauth2从cookie获取access\u令牌

  •  4
  • ionutt93  · 技术社区  · 7 年前

    我目前正在几个Spring Boot应用程序之间实现身份验证。此时,jwt访问令牌在授权标头中发送,并由资源服务器拾取。然而,我想使用HttpOnly Cookie来发送令牌,我想知道如何配置Spring Boot来从Cookie而不是标头中获取令牌。

    我应该提到的是,我正在使用spring-security-oauth2和spring-security-jwt库。

    非常感谢。

    2 回复  |  直到 7 年前
        1
  •  8
  •   ionutt93    7 年前

    通过创建自定义TokenExtractor并将其传递到配置类(带有@EnableResourceServer的配置类)中,管理从Cookie中获取令牌,如下所示:

    public void configure(ResourceServerSecurityConfigurer resources) {
        resources.tokenExtractor(new CustomTokenExtractor());
    }
    
        2
  •  3
  •   DerM    5 年前

    接受答案中的CustomExtractor可能如下所示:

    private class CustomExtractor implements TokenExtractor {
        private static final String TOKEN_KEY_JWT = "token";
    
        @Override
        public Authentication extract(HttpServletRequest request) {
            return new PreAuthenticatedAuthenticationToken(getTokenFromRequest(request), "");
        }
    
        private String getTokenFromRequest(HttpServletRequest request) {
            final Cookie[] cookies = request.getCookies();
            if (cookies == null) {
                return null;
            }
            return Arrays.stream(cookies)
                         .filter(cookie -> cookie.getName().equals(TOKEN_KEY_JWT))
                         .findFirst()
                         .map(Cookie::getValue).orElse(null);
        }
    }