在上一篇文章中,我们探讨了 OAuth2 的基本概念和工作原理。本文将重点讨论如何利用 Django OAuth Toolkit(DOT) 来构建 OAuth2 认证服务器。
1. 安装 Django OAuth Toolkit
为了实现 OAuth2 服务器,首先需要安装 Django OAuth Toolkit(DOT)。可以通过简单的命令来安装:
pip install django-oauth-toolkit
安装完成后,将 oauth2_provider
添加到 INSTALLED_APPS
中并执行迁移。
迁移后,可以在 Django 管理页面查看 DOT 提供的额外菜单。
2. 查看 Admin 中新增的菜单
安装 DOT 后,Django 管理页面将添加以下 5 个菜单:
1) 访问令牌
- 管理已颁发的 访问令牌。
- 可以查看每个令牌的有效期、相关客户端应用程序和用户信息。
- 访问令牌是经过认证的客户端访问受保护资源的密钥。
2) 刷新令牌
- 管理 刷新令牌。
- 在访问令牌过期时,用于颁发新的访问令牌。
- 通过此机制,用户可以在不重新认证的情况下执行连续操作。
3) 应用程序
- 注册和管理 OAuth2 客户端应用程序。
- 应用程序必须注册以便与认证服务器通信,并提供多种设置字段。
4) 授权
- 管理 授权码(Authorization Code)。
- 授权码是客户端应用程序请求访问令牌时所需的临时密钥。
5) ID 令牌
- 管理已颁发的 ID 令牌。
- ID 令牌在结合 OAuth2 和 OpenID Connect(OIDC) 时使用,包含用户认证信息和客户端应用程序信息。
- 客户端在利用 OpenID Connect 协议获取用户信息时使用。
3. 应用程序菜单详细说明
OAuth2 服务器的核心是 客户端应用程序 的注册。在 Application
菜单中,可以设置以下字段:
1) 名称
应用程序的名称。请确保清晰易于识别,以便管理员进行管理。
2) 客户端 ID
应用程序的唯一标识符。用于 OAuth2 服务器识别客户端,会自动生成。
3) 客户端密钥
用于客户端认证的秘密密钥。 仅适用于基于服务器的应用程序 (Confidential),应妥善保管。
4) 客户端类型
客户端应用程序的类型:
- Confidential: 可以安全存储秘密密钥的基于服务器的应用程序。
- Public: 无法存储秘密密钥的移动应用或单页面应用 (SPA)。
5) 授权许可类型
客户端应用程序将使用的认证方式。主要选项:
- 授权码: 最常见且安全性最高的方法。
- 密码: 直接输入用户的用户名/密码进行认证。
- 客户端凭证: 适用于服务器间通信。
6) 重定向 URI
认证成功后,将传递 授权码 或 访问令牌 的客户端应用程序的 URL。
- 重要:必须与客户端的设置完全一致。
- 如果 URL 不一致,OAuth2 服务器将不会传递授权码或令牌。
- 为了安全起见,建议使用 HTTPS。
7) 算法
指定用于令牌加密的算法。默认值为 RS256
,这是一种基于 RSA 的签名算法。
- RS256: 使用非对称加密,通过公钥验证签名。
- 可以根据需要更改为其他算法。
8) 跳过授权
将其设置为 True
时,将在没有用户批准的情况下自动为客户端应用程序授予权限。
适用于内部系统或信任的应用程序。
4. 总结与下一步
在本文中,我们探讨了如何利用 Django OAuth Toolkit(DOT) 的 Admin 菜单,特别是 Application
字段来构建 OAuth2 服务器。通过这篇文章,我们理解了客户端应用程序注册过程及各字段的作用。
下一篇文章将深入探讨本文提到的 Client Type。特别是,将比较 Confidential 和 Public 类型,并详细说明这两种类型在 OAuth2 中如何使用。此外,还计划涵盖以下内容:
- Client Type 和 PKCE 的关系:PKCE(代码交换的证明密钥)在公共客户端中为何重要。
- Client Secret 的作用:在 Confidential 客户端中秘密密钥的使用。
- 授权码模式的流程与 PKCE:深入了解 OAuth2 中最标准使用的授权类型的核心。
要清晰理解授权码模式的流程,了解 PKCE 和 Client Type 的交互至关重要。 下一篇文章将深入探讨这个主题。

댓글이 없습니다.