我目前正在几个Spring Boot应用程序之间实现身份验证。此时,jwt访问令牌在授权头中发送,并由资源服务器获取。但是,我想使用HttpOnly cookie来发送令牌,并想知道如何配置Spring Boot以从cookie而不是标题中获取令牌。
我应该提一下,我正在使用spring-security-oauth2和spring-security-jwt库。
谢谢!
答案 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);
}
}