OAuth2 客户端 (Python/Django)

OAuth2 Client (Python/Django)

我正在使用 Python、Django、Django Rest Framework 和 Django OAuth Toolkit (https://github.com/evonove/django-oauth-toolkit) 创建单点登录 (SSO) 服务。 SSO 服务将是一个中央独立应用程序,提供用户身份服务(授予对用户信息作为 OAuth2 受保护资源的访问权限)。

Django OAuth 工具包有助于实现 OAuth2 授权服务器。是否有同样优质的 Django 或 Python 库可以帮助实现 OAuth2 客户端(请参阅以下摘自 https://www.rfc-editor.org/rfc/rfc6749#section-1.2 的图表片段)?

+--------+                               +---------------+
|        |--(A)- Authorization Request ->|   Resource    |
|        |                               |     Owner     |
|        |<-(B)-- Authorization Grant ---|               |
|        |                               +---------------+
|        |
|        |                               +---------------+
|        |--(C)-- Authorization Grant -->| Authorization |
| Client |                               |     Server    |
|        |<-(D)----- Access Token -------|               |
|        |                               +---------------+
|        |
|        |                               +---------------+
|        |--(E)----- Access Token ------>|    Resource   |
|        |                               |     Server    |
|        |<-(F)--- Protected Resource ---|               |
+--------+                               +---------------+

(我希望我自己实现主要用例不会有问题,但如果一个好的库提供对极端情况、错误、重试的处理并且经过良好测试,那么重新发明将是一种耻辱。 )

谢谢,

保罗.

在找到并实施解决方案后一段时间回来回答我自己的问题...

我选择的方法是阅读相关的 RFC(The OAuth 2.0 Authorization FrameworkThe OAuth 2.0 Authorization Framework: Bearer Token Usage) and implement a solution with the help of the requests-oauthlib OAuth-2 workflow.

我编写的生成的 Django 应用程序的高级分解涉及创建:

  • URL 用于登录、登录回调和注销的路由
  • 处理来自 URL 的请求的伴随视图。
  • OAuth2 身份验证后端。
  • 用于对需要它的视图强制执行身份验证的中间件。

Django 应用程序作为可通过 pip 安装的独立客户端实现,可供需要单点登录的系统使用。

Django Rest Framework and Django OAuth Toolkit 的帮助下实现的 OAuth-2 授权服务器为我的单点登录基础设施提供了中心。