Kar*_*h A 5 jwt django-rest-framework django-rest-framework-jwt
使用JWT实现Django REST和身份验证.对于JWT令牌,我们必须在它到期之前刷新它.过期JWT后不会给新令牌.
对于我的移动设备,我需要每10分钟刷新一次令牌(JWT_EXPIRATION_DELTA).如果用户活动时间超过10分钟,那么我需要要求登录.即使在JWT令牌过期后,我有什么方法可以刷新令牌.(我们可以限制刷新的时间为2天)
什么是在Mobile中处理此行为的最佳方式.
谢谢.
在Django的REST的架构,智威汤逊,例如描述(第1.11.0)不支持"刷新令牌" 在这里.它仅支持刷新未过期的令牌 ; 它可以很容易地实现宽度为的滑动到期窗口JWT_EXPIRATION_DELTA.例如,使用设置
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
Run Code Online (Sandbox Code Playgroud)
用户不能处于非活动状态超过五分钟才能保持登录状态(docs).
可以实现"刷新令牌",这些令牌非常长寿("永不过期")令牌,存储在数据库中,就像传统的"HTTP会话和会话ID"一样.这实际上已经在django-rest-framework-jwt-refresh-token中为django-rest-framework-jwt实现了.另一种可能性是使用django-rest-framework-simplejwt,它还使用Access和Refresh Tokens实现JWT(完整示例为Medium).
与仅使用Access Token JWT相比,使用Refresh Tokens可以在Access Token过期后撤销访问.Refesh Tokens可以使用很长时间("移动设备的生命周期")持久令牌.有人可能会问,如果要在数据库中创建Refresh Tokens的集合并访问它,为什么不应该只使用会话(Cookie中的sessionid和数据库表中的会话数据).使用过期时间为一小时的Access令牌意味着必须每小时访问一次数据库(而不是每次使用"传统"会话时每个PUT/POST请求一次).此外,您还可以获得JWT令牌的所有常见优势(例如,在微服务网络中易于使用).
您可以使用刷新令牌,如Oauth2.0 中所定义
刷新令牌是用于获取访问令牌的凭据。刷新令牌由授权服务器发给客户端,用于在当前访问令牌失效或过期时获取新的访问令牌,
成功登录后,发出刷新和访问令牌。虽然访问令牌很快就会过期,但刷新令牌是长期存在的。安全地存储它,并在当前访问令牌到期时使用它来发布新的访问令牌
| 归档时间: |
|
| 查看次数: |
6316 次 |
| 最近记录: |