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

问题描述:

我目前有一个利用Django REST框架的大型Django项目。使用Django REST框架作为Django的身份验证后端

我还有另一个更小的Django项目,我希望构建它不直接共享数据库,而是通过API获取必要数据的主要项目。

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

基本上进程会去如下:

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

是否存在值得利用的用例,还是应该编写自己的AUTHENTICATION_BACKEND?

+0

听起来像OAuth2。 –

+0

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

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

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

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

  1. 用户验证到您的更大的API
  2. 用户会收到一个JWT从认证请求
  3. 用户返回与每个请求一起发送JWT较小的API
  4. 较小的API在收到JWT后,将其转发到您的较大API中的verify_jwt_token端点