在上一篇文章中,我们探讨了 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。特别是,将比较 ConfidentialPublic 类型,并详细说明这两种类型在 OAuth2 中如何使用。此外,还计划涵盖以下内容:

  • Client Type 和 PKCE 的关系:PKCE(代码交换的证明密钥)在公共客户端中为何重要。
  • Client Secret 的作用:在 Confidential 客户端中秘密密钥的使用。
  • 授权码模式的流程与 PKCE:深入了解 OAuth2 中最标准使用的授权类型的核心。

要清晰理解授权码模式的流程,了解 PKCE 和 Client Type 的交互至关重要。 下一篇文章将深入探讨这个主题。

OAuth 2.0 授权码授权流程