过期后如何刷新 JWT 令牌(Angular 1.5 + Laravel 5.2)
Posted
技术标签:
【中文标题】过期后如何刷新 JWT 令牌(Angular 1.5 + Laravel 5.2)【英文标题】:How to refresh JWT token after expired ( Angular 1.5 + Laravel 5.2) 【发布时间】:2016-10-10 22:38:42 【问题描述】:在 Angular 前端和 Laravel 后端 (RESTful api) 中使用基于 JWT 令牌的身份验证的最佳和最安全的方法是什么?
类似这样:http://johnsonsu.com/jwt-tokens-issues-in-angularjs-satellizer/
提前致谢。
【问题讨论】:
您可以将其用于普通登录以及社交登录。 github.com/sahat/satellizer 你甚至可以直接获取 laravel 的代码 github.com/sahat/satellizer/blob/master/examples/server/php/app/… 我正在使用同样的它太棒了。 感谢您的快速回复。我其实还有更多问题。您认为在每个请求中更新 jwt 令牌以确保安全有什么好处?角度如何知道令牌过期而不解码? 我认为它不是每次都重新生成令牌的完美方式,现在你的 laravelAuthController
将返回一个 "error":"token_not_provided"
即 401
现在如果你想重定向到登录,它将是自动的,或者如果你想做其他事情,你可以使用像这样的拦截器***.com/questions/21230417/…
我明白了!谢谢,还有一件事。 Laravel 正在设置过期时间,而 Angular 无法检查它,它不安全,即使用户在浏览器中处于活动状态,过期时间已经过去,用户应该重新登录。正常吗?
【参考方案1】:
对于介于angularjs
和Laravel
之间的JWT authentication
,您可以使用Satellizer。对于后端,即 Laravel 实现,您可以找到示例代码 here 您可以使用 satellizer 进行社交登录或仅用于普通登录。
您必须安装 jwt-auth
才能获得 laravel 后端 JWT 支持。一些博客可以参考getting started
【讨论】:
【参考方案2】:您的问题是“过期后如何刷新 JWT 身份验证”,过去几周我也在研究 JWT 身份验证以及如何使用 Angularjs 和 Phalconphp 在过期时刷新 JWT 访问令牌,已经有我可以使用的库,但我更喜欢根据我研究过的方法来理解它,所以我使用了 angular-jwt 和 firebase/php-jwt,这是我迄今为止提出的:
-
登录后,客户端将获得访问令牌和刷新令牌
访问令牌应在刷新令牌之前过期
访问令牌过期后,将从刷新令牌中获取新的访问令牌(创建 API 条目以验证刷新令牌,然后提供新的访问令牌)
检查是否撤销了刷新令牌(需要已发布刷新令牌的数据库,或者我使用 Redis 存储用户刷新令牌)。
谈到“使用基于 JWT 令牌的身份验证的最佳和最安全的方式”,一些人建议我不要使用授权标头,而是使用 cookie 以及启用 SSL。
归功于: https://stormpath.com/blog/jwt-authentication-angularjs
我希望这会有所帮助。
【讨论】:
【参考方案3】:您可以在前端使用请求/响应拦截器 satellizer
和您自己的拦截器实现。
在 Github 上的 Satellizer discussion 中查看更多详细信息。
我今天也遇到了同样的问题,但我现在解决了!
参考资料:
Interceptors in AngularJs
Store token in local/session storage
Token-Based Authentication for AngularJS and Laravel Apps
【讨论】:
以上是关于过期后如何刷新 JWT 令牌(Angular 1.5 + Laravel 5.2)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jwt 在 Angular 6 和 web api 中刷新令牌?