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

Php Angularjs和slim框架JWT身份验证和令牌刷新流,php,angularjs,authentication,slim,jwt,Php,Angularjs,Authentication,Slim,Jwt,我想知道,到目前为止,我所做的是否是验证/更新令牌的合理方法,以及在我试图将数据库交互限制为零时,是否存在任何缺陷或漏洞。来吧 用户通过普通用户名/密码或Facebook进行身份验证 PHP后端生成一个过期时间为30分钟的令牌,并将其发送到angularjs客户端 JWT令牌存储在$localStorage中 JWT令牌在拦截器的帮助下注入到每个请求头中 所有需要身份验证的Slim路由都会在中间件的帮助下检查发送的令牌 如果令牌无效(过期、被篡改、不适合该特定角色),Slim将以401/403错

我想知道,到目前为止,我所做的是否是验证/更新令牌的合理方法,以及在我试图将数据库交互限制为零时,是否存在任何缺陷或漏洞。来吧

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


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

    没有必要循环令牌过期检查。我将其用作Angular项目的库,它提供了一种在触发HTTP请求之前刷新令牌的方法,从而简化了身份验证机制


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

    有一篇关于JWT存储位置的好文章@MikaTuupola谢谢你的提示。我将把令牌存储在cookie中以增加保护。我已经实现了上面提到的反CSRF机制,并查看了您的slim jwt auth中间件。干得好!我推出了自己的非常基本的中间件,但您的中间件肯定是最棒的。我得试试看。cookie/localStorage问题是我的逻辑中唯一的错误吗?谢谢@Valdas,但循环有一个目的:它不会让令牌在浏览器打开时过期,即使没有用户活动或请求。至于AngularJWT库提供的所有便利,我可能会在我的下一个项目中使用它。