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

Using Django REST Framework as an authentication backend for Django

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

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

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

基本上流程如下:

  1. 用户尝试使用大型 Django-DRF 项目中用户的凭据登录小型 Django 项目。
  2. 小型 Django 项目向大型 Django-DRF 项目发送 API 登录请求。
  3. 大型 Django-DRF 项目 returns API 令牌和序列化用户信息。
  4. 小型 Django 项目 auto-adds/updates 用户使用大型 Django-DRF 项目响应中的信息访问其数据库。
  5. 小型 Django 项目使用令牌响应用户客户端,因此来自小型 Django 项目页面的 AJAX 请求可以直接发送到大型 Django-DRF 项目的端点。

是否有值得利用此用例的现有插件,或者我应该编写自己的 AUTHENTICATION_BACKEND?

听起来你可能想调查一下 django-rest-framework-jwt. This would allow you to use JWT as your authentication mechanism, which can easily handle your case. The project actually provides an endpoint specifically for what you want, verify_jwt_token. According to the documentation:

In some microservice architectures, authentication is handled by a single service. Other services delegate the responsibility of confirming that a user is logged in to this authentication service. This usually means that a service will pass a JWT received from the user to the authentication service, and wait for a confirmation that the JWT is valid before returning protected resources to the user.

因此您的工作流程将类似于:

  1. 用户向更大的 API
  2. 进行身份验证
  3. 用户收到从身份验证请求返回的 JWT
  4. 用户将 JWT 与每个请求一起发送到较小的 API
  5. 较小的 API 在收到 JWT 后将其转发到较大的 API
  6. 中的 verify_jwt_token 端点