Django JWT和OAuth身份验证和授权

时间:2017-03-02 09:29:31

标签: django oauth-2.0 django-rest-framework jwt

目前我正在为我的django REST API使用JWT身份验证。

但是从JWT库中我无法在到期后刷新令牌。 (5分钟) https://github.com/GetBlimp/django-rest-framework-jwt

所以我需要为刷新令牌和访问令牌的JWT令牌集成OAuth 2.0。

如何为我的REST Framework集成JWT + OAuth 2.0。或任何样品?

EX: https://github.com/GetBlimp/django-rest-framework-jwthttps://django-oauth-toolkit.readthedocs.io/en/latest/#

2 个答案:

答案 0 :(得分:0)

我们离开的路线是增加令牌到期时间(比如36小时),然后达到某个阈值时(比如令牌到期前12小时),请求新令牌来自服务器。

为什么36和12?完全假设在这里,但是用户可能每1.5天访问一个站点,并且12小时的窗口让他们在我们的网站之外有更多的生活时间(这听起来很疯狂,但那是另一个故事) )。选择似乎符合用户行为的小时数。尝试找到用户可能回到您的网站并在刷新窗口上做出明智决定的时间。当然,JWT也有一个可刷新的时间限制,你可能会在一些应用程序中看到这些时间限制"在接下来的30天内让我登录,"用户必须重新进行身份验证。

安全明智吗?在阅读了SO的一堆答案后,似乎有更长的到期时间并不会使您的JWT更容易受到攻击。如果你是偏执狂,你可以将旧的JWT列入黑名单(但仍然有剩余时间),但在大多数情况下,通过HTTPS应该足够了。

答案 1 :(得分:0)

这是我的建议:

  • 您只需要使用JWT(无需为刷新令牌使用OAuth 2.0)。
  • 如果要在5分钟后刷新令牌,则应对应用程序进行一些自定义。

步骤1:您需要添加一个名为import os os.environ["JAVA_HOME"] = <path-you-obtained> 的表(该表将存储5分钟后过期的所有令牌),

第2步:编写脚本以设置5分钟后所有令牌的到期时间,并将该令牌放入BlackList表中。

第3步:然后,您需要重写用于验证表BlackList中的令牌的身份验证方法;创建一次新的,或拒绝权限...然后