2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18)
開發版本: devel

50.3. OAuth 驗證器回撥 #

OAuth 驗證器模組透過定義一組回撥函式來實現其功能。伺服器將在需要時呼叫它們來處理來自使用者的身份驗證請求。

50.3.1. 啟動回撥 #

在載入模組後,會立即執行 startup_cb 回撥。如果需要,此回撥可用於設定本地狀態並執行其他初始化。如果驗證器模組有狀態,則可以使用 state->private_data 來儲存它。

typedef void (*ValidatorStartupCB) (ValidatorModuleState *state);

50.3.2. 驗證回撥 #

當用戶嘗試使用 OAuth 進行身份驗證時,會在 OAuth 交換過程中執行 validate_cb 回撥。在先前的呼叫中設定的任何狀態都可以在 state->private_data 中獲得。

typedef bool (*ValidatorValidateCB) (const ValidatorModuleState *state,
                                     const char *token, const char *role,
                                     ValidatorModuleResult *result);

token 將包含要驗證的持有者令牌。 PostgreSQL 已確保令牌在語法上格式正確,但未執行任何其他驗證。 role 將包含使用者請求登入的角色。回撥必須在 result 結構中設定輸出引數,該結構定義如下:

typedef struct ValidatorModuleResult
{
    bool        authorized;
    char       *authn_id;
} ValidatorModuleResult;

只有當模組將 result->authorized 設定為 true 時,連線才會繼續。為了驗證使用者身份,必須使用 palloc 分配經過身份驗證的使用者名稱(根據令牌確定)並將其返回到 result->authn_id 欄位。或者,如果令牌有效但無法確定關聯的使用者身份,則 result->authn_id 可以設定為 NULL。

驗證器可以返回 false 來指示內部錯誤,在這種情況下,所有結果引數都將被忽略,並且連線將失敗。否則,驗證器應返回 true 以表示它已處理令牌並做出了授權決定。

validate_cb 返回後的行為取決於特定的 HBA 設定。通常,result->authn_id 使用者名稱必須與使用者登入的角色完全匹配。(此行為可以透過使用者對映進行修改。)但是,在啟用 delegate_ident_mapping 的 HBA 規則進行身份驗證時,PostgreSQL 將不會對 result->authn_id 的值執行任何檢查;在這種情況下,由驗證器來確保令牌具有足夠的許可權,以便使用者能夠以指定的 role 登入。

50.3.3. 關閉回撥 #

當與連線關聯的後端程序退出時,將執行 shutdown_cb 回撥。如果驗證器模組有任何已分配的狀態,則應在此回撥中釋放它,以避免資源洩漏。

typedef void (*ValidatorShutdownCB) (ValidatorModuleState *state);

提交更正

如果您在文件中發現任何不正確、與您使用特定功能時的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。