使用:

  • Django 1.11

  • Python 3.6

  • 在FE中使用JWT的DRF

据我所知,Django管理员使用会话和基本身份验证 .

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

  • 用户转到 domain/admin/* ,重定向到AWS登录

  • 成功登录后,用户被重定向到 redirect_uri ,导致Django视图

  • 在视图中,我用令牌替换 code

  • 我可以't navigate to any Admin page - I am trying to redirect, but that doesn'工作,因为我没有 login() 用户

  • Stuck - 我想将User与获取的令牌相关联,并对每个Admin页面请求进行身份验证,并在用户注销时删除令牌

接下来该怎么办?

  • 当我将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.
        ...
  • 如何让不同的管理页面请求将令牌传递给身份验证?

  • 我在哪里存储令牌? (我可以使用Django User模型创建一个1-1的 NewUserModel ,并在其中放置一个标记字段)

  • 我正在考虑编写一个中间件来捕获所有请求,并查看目标URL - 如果是Admin url,一旦我获取#2中提到的用户(由于DRF,用户在每个请求中),都会将令牌添加到 HTTP_AUTHORIZATION

编辑2

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

  • 我创建了一个具有1-1用户字段和令牌字段的模型

  • 当我正在获取/创建用户时,我还在上面#1的用户相关模型上保存令牌

  • 我创建了一个中间件,它捕获 process_request 中的任何请求,并且可以访问该用户 . 当我从上面的#1访问用户的相关模型时,我可以在那里看到令牌 .

  • 我正在尝试在请求上设置 HTTP_AUTHORIZATION 标头,但还不能这样做(目前卡在这里)

  • 在我的后端,我正在查看传入的请求,并尝试获取 HTTP_AUTHORIZATION - 还没有 .