Spring Boot JWT 身份验证

Posted

技术标签:

【中文标题】Spring Boot JWT 身份验证【英文标题】:Spring boot JWT auth 【发布时间】:2018-02-27 22:29:41 【问题描述】:

我尝试使用 Spring Boot 开发 Web 应用程序,我使用以下教程进行身份验证:http://www.techforumist.com/spring-boot-security-jpa-using-jwt-angularjs-tutorial-2/#comment-2848

它工作得很好,但在刷新页面连接后丢失(注销) - 并且需要重新登录。 我知道我需要会话/cookie,但我不知道该怎么做。

你能帮帮我吗? 这是源代码:https://github.com/techforumist/jwt-spring-boot-security-angularjs

谢谢

【问题讨论】:

【参考方案1】:

您不需要会话/cookie,因为您使用 JWT 令牌,其中包含有关用户的信息。 在源代码中,我看不到任何将 jwt 令牌存储在浏览器中的代码。我也看不到任何刷新 jwt。所以我想,你必须实现那个(或者至少是令牌存储)。 我是这样看的:

    将 JWT 令牌存储在浏览器内存中。在 https://github.com/techforumist/jwt-spring-boot-security-angularjs/blob/master/src/main/resources/static/app/controllers/login.js你 有res.token 值。您可以将此值保存到浏览器本地 存储与localStorage.setItem("JwtToken", res.token)

    在您的前端应用中刷新后对用户进行身份验证。 为此,您必须在加载应用程序时从本地存储中获取令牌,将其设置为所有 http 请求的默认标头,并向后端中的 /user 端点发出请求,以获取用户对象。您可以从令牌(使用 base64)对用户进行编码,但调用端点会更简单。 所以在角度上你可以使用 run 方法(它在初始化之前完成):

    angular.module('fooApp').run(['$http', '$rootScope', 'AuthService', function($http, $rootScope, AuthService) var token = localStorage.getItem("JwtToken"); if(token) $http.defaults.headers.common['Authorization'] = 'Bearer ' + token; $http.get('./user').then(function(resp) AuthService.user = resp; ); ]);

这应该可以完成页面刷新后记录用户的技巧。 当然,下一步应该是刷新 jwt 令牌(在运行/路由更改/每个请求时 - 有很多选项),但这不是问题所在。

【讨论】:

hi, wkubasik, thnx for answer,第 1 步。成功完成,(我使用控制台命令 localstorage 及其返回令牌检查它。)第 2 步。我在 home.js 下添加此代码 angular.module('JWTDemoApp').run( >>>your code 嗨。我在代码中犯了小错误。你能在$http.get('./user')请求调用之前剪下$http.defaults.headers.common['Authorization'] = 'Bearer ' + token;这一行并粘贴它吗?因为我们应该在这个请求之前将 jwt token 设置为 header。我更新了我的答案。希望对你有帮助 我这样做了,但重新加载后没有任何变化仍然注销:( 如果您使用 Chrome 浏览器,请单击 f12,转到“网络”选项卡,然后查找 /user 请求(您必须刷新页面才能显示)。然后单击此请求并选择“预览”选项卡。您应该在那里看到您的用户对象。检查用户是否在那里。您可以在 /user 端点中添加 ResponseEntity 作为后端的返回值。 "id":1,"name":"admin","username":"admin","roles":["USER","ADMIN"] 我看到这个对象但是不明白下一步“您可以在 /user 端点中添加 ResponseEntity 作为后端的返回值。”

以上是关于Spring Boot JWT 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 2 上实现基于过滤器的 JWT 身份验证与 OAuth2 JWT 身份验证

使用 Spring Boot 进行 JWT 身份验证

在 Spring Boot API 上实现 JWT 身份验证

在 Spring Boot 中使用 JWT 进行简单的身份验证

如何在 Spring Boot 中实现 oAuth2 和 JWT 身份验证? [关闭]

spring boot - 基本的 Active Directory 身份验证,然后是 JWT 令牌