我正在编写一个客户端应用程序来访问我用PHP编写的一些服务器端点。我正在使用JWT进行身份验证,并成功建立了一个工作系统,人们可以使用他们的用户名/密码登录以换取JWT,然后可以使用JWT来访问终点,直到JWT到期。
但现在我正在学习JWT刷新令牌(RT)和JWT访问令牌(AT)。
从我一直读到的RT到期时间应该很长,以避免烦人的重复登录,而AT到期时间应该很短,所以如果AT被截获,它很可能无法使用。 / p>
但是,由于以下原因,我有点困惑:
当AT到期时,客户端必须向服务器发送RT以获取有效的AT以供使用。
因此,RT会被传输,并且可能被拦截或可能在某些日志中找到。所以这不会否定安全性好处。我们仍然需要传输RT才能获得AT,所以使用RT和AT更安全,而不仅仅是使用AT进行身份验证?
目前我认为AT应该只持续30秒左右,而RT应该持续一个小时。也许我的时间表是错误的,我应该更多地考虑RT的最后一周,而AT的最后60分钟还是什么?
答案 0 :(得分:2)
关于安全性:你是对的,仅使用一个令牌来获取另一个令牌没有多大意义,但jwt身份验证应该只通过HTTPS传输并避免中间人攻击CORS和其他手段(如客户端指纹)应该用。 RT的有效时间必须仅在AT到期时开始。如果你不必无国籍,你可以例如将生成的jwt保存在服务器上,并在其到期等之前不生成另一个jwt。 时间尺度完全取决于应用。如果它的API是一个向全世界开放的金融系统,对于AT来说,时间应该非常短,而对于RT来说也不会太长,但如果它没有敏感数据RT的社区站点应该真的很长,方便起来比顶级安全更重要。我希望它有所帮助。