Angularjs 和 slim 框架 JWT 身份验证和令牌刷新流程

Posted

技术标签:

【中文标题】Angularjs 和 slim 框架 JWT 身份验证和令牌刷新流程【英文标题】:Angularjs and slim framework JWT authentication and token refresh flow 【发布时间】:2015-11-16 18:43:20 【问题描述】:

我想知道到目前为止我所做的是否是一种验证/更新令牌的可靠方法,以及在我试图将数据库交互限制为零时是否应该注意任何缺陷或漏洞。来了。

    用户通过普通用户名/密码或通过 Facebook 进行身份验证 php后端生成一个有效期为30分钟的token并发送给angularjs客户端 JWT 令牌存储在 $localStorage 中 在拦截器的帮助下,JWT 令牌被注入到每个请求标头中 所有需要身份验证的 Slim 路由都在中间件的帮助下检查发送的令牌。 如果令牌无效(已过期、已被篡改、不适合该特定角色),Slim 将响应 401/403 错误。 角度服务每分钟检查令牌是否即将过期 如果令牌即将过期(还剩 5 到 1 分钟),服务会将旧令牌发布到另一个 API 端点。 API 端点检查令牌的有效性并以过期时间为 +30 分钟的新令牌进行响应。 我之前提到的轮询服务替换了 $localStorage 中的旧令牌。 冲洗并重复。

注意:SSL 将在生产中实现

赏金授予@Valdas,因为他是唯一真正回答的人

【问题讨论】:

有一篇关于 JWT 存储位置的好文章。 stormpath.com/blog/… @MikaTuupola 感谢您的提示。我会将令牌存储在 cookie 中以增加保护。我已经实现了那里提到的反 CSRF 机制,并查看了您的 slim-jwt-auth 中间件。干得好!我推出了自己的非常基本的中间件,但你的绝对是最重要的。一定要试一试。 cookie/localStorage 问题是我的逻辑中唯一看起来错误的事情吗? 【参考方案1】:

无需循环令牌过期检查。我使用https://github.com/auth0/angular-jwt 作为我的 Angular 项目的库,它提供了一种在触发 HTTP 请求之前刷新令牌的方法,从而简化了身份验证机制。

此外,如果请求加载模板(以 .html 结尾),您可以从请求中删除令牌,但这只是个人喜好。

【讨论】:

谢谢@Valdas,但循环有一个目的:它不会让令牌在浏览器打开时过期,即使没有用户活动或请求。至于 angular-jwt 库提供的所有便利,我可能会在我的下一个项目中使用它。

以上是关于Angularjs 和 slim 框架 JWT 身份验证和令牌刷新流程的主要内容,如果未能解决你的问题,请参考以下文章

JWT:slim v3 和 Android 中的身份验证

PHP、JWT 透传路径和方法

使用 slim-jwt-auth 生成令牌

使用slim-jwt-auth生成令牌

找不到 Slim jwt 令牌(由 axios 请求发送)

通过 Angular JS $http.post 使用 slim 框架时出现 404 无效的 http 状态代码