Spring引导安全性oauth2从cookie获取access_token

时间:2018-01-25 14:11:34

标签: java spring cookies oauth-2.0 spring-security-oauth2

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

我应该提一下,我正在使用spring-security-oauth2和spring-security-jwt库。

谢谢!

2 个答案:

答案 0 :(得分:5)

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

public void configure(ResourceServerSecurityConfigurer resources) {
    resources.tokenExtractor(new CustomTokenExtractor());
}

答案 1 :(得分:1)

接受的答案中的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);
    }
}