Java Spring Boot OAuth2:从cookie中提取JWT进行身份验证
我正在使用SpringBoot为我的应用程序构建一个简单的身份验证过程。 我有AuthorizationServerConfig和ResourceServerConfig设置,我的前端是SPA。当我点击/oauth/token路由时,我得到了一个以前存储在localStorage中的JWT,当我尝试点击资源服务器路由时,我用这个JWT设置了授权头,一切正常 但是现在我想使用存储在cookie中的JWT进行授权,如何配置它,使其与当前的授权/资源服务器配置一起工作?我在谷歌上搜索了一段时间,我能找到的最好的方法就是设置一个自定义令牌提取器,但我不知道如何正确使用,提前谢谢你 -------更新-------Java Spring Boot OAuth2:从cookie中提取JWT进行身份验证,java,spring,spring-boot,oauth-2.0,jwt,Java,Spring,Spring Boot,Oauth 2.0,Jwt,我正在使用SpringBoot为我的应用程序构建一个简单的身份验证过程。 我有AuthorizationServerConfig和ResourceServerConfig设置,我的前端是SPA。当我点击/oauth/token路由时,我得到了一个以前存储在localStorage中的JWT,当我尝试点击资源服务器路由时,我用这个JWT设置了授权头,一切正常 但是现在我想使用存储在cookie中的JWT进行授权,如何配置它,使其与当前的授权/资源服务器配置一起工作?我在谷歌上搜索了一段时间,我能找
我打开了@EnableAuthorizationServer和@EnableResourceServer,EnableResourceServer自动设置了一个OAuthAuthenticationProcessingFilter,这个filter用户承载头身份验证使用承载令牌提取器从请求头提取,我查看了源代码,它被硬编码到库中,如何自定义此筛选器以从cookie中提取JWT?从请求对象读取cookie值并手动解析JWT。 下面是示例代码
public Jws<Claims> parseJWT(HttpServletRequest request) {
Cookie cookie = WebUtils.getCookie(request, "Token cookie name");
if(cookie == null) {
throw new SecurityException("Token not found from cookies");
}
String token = cookie.getValue();
return Jwts.parser().setSigningKey("your signing Key").parseClaimsJws(token);
}
您可以创建请求过滤器并检查jwt。jwt有许多实现。我用这个。io.jsonwebtoken 我正在添加一个令牌助手类,该类具有验证、生成和刷新令牌的方法。您可以关注JWT提取部分 Jar依赖关系
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
最后是您的控制器类
public void validateToken(HttpServletRequest request) {
Cookie cookie = WebUtils.getCookie(request, "TOKEN_NAME");
if(cookie == null) {
throw new SecurityException("JWT token missing");
}
String token = cookie.getValue(); // JWT Token
Claims claims = TokenHelper.getAllClaimsFromToken(token); // claims will be null if Token is invalid
}
public void validateToken(HttpServletRequest request) {
Cookie cookie = WebUtils.getCookie(request, "TOKEN_NAME");
if(cookie == null) {
throw new SecurityException("JWT token missing");
}
String token = cookie.getValue(); // JWT Token
Claims claims = TokenHelper.getAllClaimsFromToken(token); // claims will be null if Token is invalid
}