在前面的文章中,我們已經了解了 OAuth2 的基本概念和運作方式。在這篇文章中,我們將重點探討如何使用 Django OAuth Toolkit(DOT) 來配置 OAuth2 認證伺服器。


1. 安裝 Django OAuth Toolkit

為了實現 OAuth2 伺服器,首先需要安裝 Django OAuth Toolkit(DOT)。可以使用簡單的命令進行安裝:

pip install django-oauth-toolkit

安裝完成後,請在 INSTALLED_APPS 中添加 oauth2_provider,並執行遷移。 遷移後,您可以在 Django Admin 頁面中檢查 DOT 提供的額外菜單。


2. 在 Admin 中查看新增的菜單

安裝 DOT 後,Django Admin 中將新增 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(Proof Key for Code Exchange) 在公共客戶端中至關重要。
  • Client Secret 的角色:如何在保密客戶端中使用秘密密鑰。
  • 授權碼方式的流程與 PKCE:解析 OAuth2 中最標準的授權類型的核心。

為了明確理解授權碼方式的流程,必須正確了解 PKCE 和 Client Type 的相互作用。 在下一篇文章中,我們將詳細討論這個主題。

OAuth 2.0 授權碼授予流程