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);
}
}
我目前正在几个 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);
}
}