Spring 启动安全 oauth2 从 cookie 中获取 access_token

Spring boot security oauth2 get access_token from cookie

我目前正在几个 Spring 引导应用程序之间实施身份验证。目前,jwt 访问令牌在授权 header 中发送,并由资源服务器拾取。但是我想使用 HttpOnly cookies 来发送令牌并且想知道你如何配置 Spring Boot 以从 cookies 而不是 headers.

获取令牌

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

谢谢!

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

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

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