Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot OAuth2:从cookie中提取JWT进行身份验证_Java_Spring_Spring Boot_Oauth 2.0_Jwt - Fatal编程技术网

Java Spring Boot OAuth2:从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进行授权,如何配置它,使其与当前的授权/资源服务器配置一起工作?我在谷歌上搜索了一段时间,我能找

我正在使用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

}