使用Django REST框架作为Django的身份验证后端
问题描述:
我目前有一个利用Django REST框架的大型Django项目。使用Django REST框架作为Django的身份验证后端
我还有另一个更小的Django项目,我希望构建它不直接共享数据库,而是通过API获取必要数据的主要项目。
我想覆盖较小项目的AUTHENTICATION_BACKEND,并使用较大的API身份验证端点作为身份验证器。
基本上进程会去如下:
- 用户尝试登录到使用的凭据为他们在大Django的DRF项目用户小Django项目。
- 小型Django项目向大型Django-DRF项目发送API登录请求。
- 大型Django-DRF项目返回API令牌和序列化的用户信息。
- 小型Django项目使用来自大型Django-DRF项目响应的信息自动添加/更新用户到其数据库。
- 小型Django项目使用令牌响应用户客户端,以便可以将来自Small Django项目页面的AJAX请求直接发送到大型Django-DRF项目的端点。
是否存在值得利用的用例,还是应该编写自己的AUTHENTICATION_BACKEND?
答
这听起来像你可能想看看django-rest-framework-jwt。这将允许您使用JWT作为您的身份验证机制,它可以轻松处理您的案例。该项目实际上提供了一个专门用于你想要的端点,verify_jwt_token
。根据documentation:
在一些微服务体系结构中,身份验证由单个服务处理。其他服务委派确认用户登录到此身份验证服务的责任。这通常意味着服务会将从用户接收的JWT传递给身份验证服务,并在向用户返回受保护的资源之前等待JWT有效的确认。
所以,你的工作流程是这样的:
- 用户验证到您的更大的API
- 用户会收到一个JWT从认证请求
- 用户返回与每个请求一起发送JWT较小的API
- 较小的API在收到JWT后,将其转发到您的较大API中的
verify_jwt_token
端点
听起来像OAuth2。 –
如果您的DRF应用程序符合Oauth2或某些其他标准身份验证方案,您应该能够轻松找到后端。如果不是的话,你最好写自己的。这并不难。 –