Django Admin使用JWT

时间:2018-12-10 02:38:45

标签: django django-admin jwt

使用:

  • Django 1.11
  • Python 3.6
  • 在FE中使用JWT的DRF

我了解Django管理员使用会话和基本身份验证。

到目前为止,我做的是:用AWS-Cognito替换了Django Admin身份验证登录页面:

  • 用户转到domain/admin/*,重定向到AWS中的登录
  • 成功登录后,用户将被重定向到redirect_uri,并进入Django视图
  • 在视图中,我将code替换为令牌
  • 我无法导航到任何管理页面-我正在尝试重定向,但这不起作用,因为我没有login()用户
  • 卡住了-我想将用户与获取的令牌相关联,并对每个管理页面请求进行身份验证,并且当用户注销时删除令牌

下一步做什么?

  • 当我在前端应用程序中使用JWT时,每个request.META都有HTTP_AUTHORIZATION,并使用合适的后端。
  • 我知道如何添加后端,并有可能利用user.backend(我还将Cognito-JWT用于其他FE部分,因此已经为此写了BE)
  • 我需要找到一种方法,用获取的令牌替换Django Admin会话身份验证

谢谢!

编辑:

如果我login()用户,并将其设置为我已经拥有的模型后端,则可以导航到任何管理页面-但使用登录用户时创建的会话。

我希望将用户设置为一个新的模型后端,并使用使用令牌的身份验证(来自Django backend docs):

class MyBackend:
    def authenticate(self, request, token=None):
        # Check the token and return a user.
        ...
  1. 如何使不同的“管理页面”请求将令牌传递给身份验证?
  2. 我将令牌存储在哪里? (我可以使用Django User模型将NewUserModel设置为1-1,然后在其中放置令牌字段)
  3. 我正在考虑编写一个中间件来捕获所有请求,并查看目标URL-如果我是Admin url,则在获取#2中提到的用户后,将令牌添加到HTTP_AUTHORIZATION中(该用户位于由于DRF导致的每个请求)

编辑2

我的解决方案越来越像this stack solution,我很想知道是否还有其他选择,但这是我到目前为止所做的:

  1. 我制作了一个具有1-1用户字段和令牌字段的模型
  2. 在获取/创建用户时,我还将令牌保存在上述#1中与用户相关的模型中
  3. 我创建了一个中间件,该中间件可以捕获process_request中的任何请求,并且可以访问用户。从上面的#1访问用户的相关模型时,我可以在其中看到令牌。
  4. 我正在尝试在请求上设置HTTP_AUTHORIZATION头,但是还不能这样做(当前卡在此处)
  5. 在后端,我正在查看传入的请求,并尝试获取HTTP_AUTHORIZATION-尚不存在。

编辑3

我最终还是按原样使用了Django会话-用户一旦通过AWS-Cognito进行身份验证,就可以安全地假定它是合法用户。
然后,我只是转储Cognito-JWT,并login()个用户。

注意:我仍然对一个解决方案感兴趣,该解决方案将删除使用Cognito-JWT的Django会话,并且希望听到建议。

0 个答案:

没有答案