使用 Django REST Framework 作为 Django 的身份验证后端

Posted

技术标签:

【中文标题】使用 Django REST Framework 作为 Django 的身份验证后端【英文标题】:Using Django REST Framework as an authentication backend for Django 【发布时间】:2016-08-06 11:33:47 【问题描述】:

我目前有一个利用 Django REST 框架的大型 Django 项目。

我有另一个较小的 Django 项目,我想在主项目的基础上构建它,它不直接共享数据库,而是通过 API 获取必要的数据。

我想覆盖较小项目的 AUTHENTICATION_BACKEND 并让它使用较大项目的 API auth 端点作为身份验证器。

基本上流程如下:

    用户尝试在大型 Django-DRF 项目中使用其用户的凭据登录小型 Django 项目。 小型 Django 项目向大型 Django-DRF 项目发送 API 登录请求。 大型 Django-DRF 项目返回 API 令牌和序列化的用户信息。 小型 Django 项目使用来自大型 Django-DRF 项目响应的信息自动将用户添加/更新到其数据库。 小型 Django 项目使用令牌响应用户客户端,以便可以将来自小型 Django 项目页面的 AJAX 请求直接发送到大型 Django-DRF 项目的端点。

是否存在值得为此用例利用的现有插件,还是我应该编写自己的 AUTHENTICATION_BACKEND?

【问题讨论】:

如果您的 DRF 应用程序符合 Oauth2 或某些其他标准身份验证方案,您应该能够轻松找到后端。如果不是,您最好自己编写。这并不难。 【参考方案1】:

听起来您可能想查看django-rest-framework-jwt。这将允许您使用 JWT 作为您的身份验证机制,可以轻松处理您的情况。该项目实际上提供了一个专门用于您想要的端点,verify_jwt_token。根据documentation:

在某些微服务架构中,身份验证由单个服务处理。其他服务委派确认用户登录到此身份验证服务的责任。这通常意味着服务将从用户接收到的 JWT 传递给身份验证服务,并等待确认 JWT 有效,然后再将受保护的资源返回给用户。

所以你的工作流程会是这样的:

    用户通过更大的 API 进行身份验证 用户收到来自身份验证请求的 JWT 用户将 JWT 与每个请求一起发送到较小的 API 较小的 API 在收到 JWT 后,会将其转发到较大 API 中的 verify_jwt_token 端点

【讨论】:

这两个 Django 项目的设置会是什么样子?具体来说,将使用另一个 django 项目接收 jwt 的项目的 settings.py 中的身份验证后端设置。它开箱即用吗?

以上是关于使用 Django REST Framework 作为 Django 的身份验证后端的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证

18-Django REST framework-使用Django开发REST 接口

如何在 django-rest-framework 中为 API 使用 TokenAuthentication

Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers

django rest framework中文介绍

使用 django-rest-framework-simplejwt 注册后返回令牌