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

Angularjs and slim framework JWT authentication and token refresh flow

我想知道到目前为止我所做的是否是 authenticating/renewing 令牌的合理方式,以及在我尝试限制数据库时是否应该注意任何缺陷或漏洞互动为零。开始了。

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

注意:SSL 将在生产中实施

赏金授予@Valdas,因为他是唯一一个实际回答的人

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

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