过期后如何刷新 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 令牌以确保安全有什么好处?角度如何知道令牌过期而不解码? 我认为它不是每次都重新生成令牌的完美方式,现在你的 laravel AuthController 将返回一个 "error":"token_not_provided"401 现在如果你想重定向到登录,它将是自动的,或者如果你想做其他事情,你可以使用像这样的拦截器***.com/questions/21230417/… 我明白了!谢谢,还有一件事。 Laravel 正在设置过期时间,而 Angular 无法检查它,它不安全,即使用户在浏览器中处于活动状态,过期时间已经过去,用户应该重新登录。正常吗? 【参考方案1】:

对于介于angularjsLaravel 之间的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 中刷新令牌?

使用 Angular 和 JWT 令牌持续登录

使用 angular 和 express-jwt 实现刷新令牌

过期后使用刷新令牌获取访问令牌(JWT)

Angular 6在令牌更新后重制请求之前更改JWT令牌

Angular2-jwt - AuthHttp,刷新令牌,把它们放在一起