OAuth 2.0 是一個行業標準框架,定義在 RFC 6749 中,它允許第三方應用程式獲得對受保護資源的有限訪問許可權。當構建 PostgreSQL 時,必須啟用 OAuth 客戶端支援,有關更多資訊,請參閱 第 17 章。
在討論 OAuth 生態系統時,本文件使用以下術語:
擁有受保護資源並可以授予對這些資源訪問許可權的使用者或系統。當資源所有者是個人時,本文件也使用“終端使用者”一詞。當您使用 psql 透過 OAuth 連線到資料庫時,您就是資源所有者/終端使用者。
使用訪問令牌訪問受保護資源的系統。當連線到 PostgreSQL 叢集時,使用 libpq 的應用程式(如 psql)是 OAuth 客戶端。
託管客戶端訪問的受保護資源的系統。連線到的 PostgreSQL 叢集是資源伺服器。
開發和/或管理給定應用程式的 OAuth 授權伺服器和客戶端的組織、產品供應商或其他實體。不同的提供商通常會為他們的 OAuth 系統選擇不同的實現細節;一個提供商的客戶端通常不能保證訪問另一個提供商的伺服器。
“提供商”一詞的用法並不標準,但似乎在口語中有廣泛使用。(不應將其與 OpenID 類似的術語“身份提供商”混淆。雖然 PostgreSQL 中的 OAuth 實現旨在與 OpenID Connect/OIDC 互操作併兼容,但它本身不是 OIDC 客戶端,也不需要使用 OIDC。)
在經過身份驗證的資源所有者已獲得批准後,接收來自客戶端的請求並向客戶端頒發訪問令牌的系統。PostgreSQL 不提供授權伺服器;這是 OAuth 提供商的責任。
授權伺服器的識別符號,以 https://
URL 的形式列印,為 OAuth 客戶端和應用程式提供可信的“名稱空間”。頒發者識別符號允許單個授權伺服器與互不信任的實體的客戶端進行通訊,只要它們維護獨立的頒發者。
對於小型部署,可能“提供商”、“授權伺服器”和“頒發者”之間沒有明顯的區別。然而,對於更復雜的設定,可能存在一對多(或多對多)的關係:提供商可能將多個頒發者識別符號租給不同的租戶,然後提供多個授權伺服器,可能具有不同的支援功能集,以與他們的客戶端進行互動。
PostgreSQL 支援 RFC 6750 中定義的持有者令牌(bearer tokens),這是一種與 OAuth 2.0 配合使用的訪問令牌型別,其中令牌是匿名字串。訪問令牌的格式是實現特定的,並由每個授權伺服器選擇。
以下配置選項支援 OAuth:
issuer
一個 HTTPS URL,它要麼是授權伺服器的精確 頒發者識別符號(根據其發現文件定義),要麼是一個指向該發現文件本身的知名 URI。此引數是必需的。
當 OAuth 客戶端連線到伺服器時,將使用頒發者識別符號構建發現文件的 URL。預設情況下,該 URL 使用 OpenID Connect Discovery 的約定:將在頒發者識別符號的末尾附加路徑 /.well-known/openid-configuration
。或者,如果 issuer
包含 /.well-known/
路徑段,則該 URL 將按原樣提供給客戶端。
libpq 中的 OAuth 客戶端要求伺服器的頒發者設定必須與發現文件中提供的頒發者識別符號完全匹配,而發現文件又必須匹配客戶端的 oauth_issuer 設定。不允許有任何大小寫或格式上的差異。
scope
用於伺服器授權客戶端和認證使用者的 OAuth 範圍列表,以空格分隔。適當的值由授權伺服器和使用的 OAuth 驗證模組確定(有關驗證模組的更多資訊,請參閱 第 50 章)。此引數是必需的。
validator
用於驗證持有者令牌的庫。如果給定,名稱必須與 oauth_validator_libraries 中列出的庫之一完全匹配。除非 oauth_validator_libraries
包含多個庫,否則此引數是可選的,但在這種情況下是必需的。
map
允許 OAuth 身份提供商和資料庫使用者名稱稱之間的對映。有關詳細資訊,請參閱 第 20.2 節。如果未指定對映,則令牌關聯的使用者名稱稱(由 OAuth 驗證器確定)必須與請求的角色名稱完全匹配。此引數是可選的。
delegate_ident_mapping
一個高階選項,不用於常見用途。
當設定為 1
時,將跳過與 pg_ident.conf
的標準使用者對映,OAuth 驗證器將全權負責將終端使用者身份對映到資料庫角色。如果驗證器授權了令牌,則伺服器會信任使用者有權以請求的角色連線,並且即使使用者身份驗證狀態如何,連線也可以繼續。
此引數與 map
不相容。
delegate_ident_mapping
為身份驗證系統的設計提供了額外的靈活性,但它也要求 OAuth 驗證器的仔細實現,該驗證器必須確定提供的令牌是否帶有足夠的終端使用者許可權,以及 所有驗證器所需的標準檢查。請謹慎使用。
如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。