在前面的文章中,我們已經了解了 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。特別是,將比較 Confidential 和 Public 類型,詳細解釋這兩種類型在 OAuth2 中的使用情況。此外,計劃內容包括:
- Client Type 與 PKCE 的關係:為什麼 PKCE(Proof Key for Code Exchange) 在公共客戶端中至關重要。
- Client Secret 的角色:如何在保密客戶端中使用秘密密鑰。
- 授權碼方式的流程與 PKCE:解析 OAuth2 中最標準的授權類型的核心。
為了明確理解授權碼方式的流程,必須正確了解 PKCE 和 Client Type 的相互作用。 在下一篇文章中,我們將詳細討論這個主題。

Add a New Comment