OAuth 驗證器模組透過定義一組回撥函式來實現其功能。伺服器將在需要時呼叫它們來處理來自使用者的身份驗證請求。
在載入模組後,會立即執行 startup_cb
回撥。如果需要,此回撥可用於設定本地狀態並執行其他初始化。如果驗證器模組有狀態,則可以使用 state->private_data
來儲存它。
typedef void (*ValidatorStartupCB) (ValidatorModuleState *state);
當用戶嘗試使用 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
登入。
當與連線關聯的後端程序退出時,將執行 shutdown_cb
回撥。如果驗證器模組有任何已分配的狀態,則應在此回撥中釋放它,以避免資源洩漏。
typedef void (*ValidatorShutdownCB) (ValidatorModuleState *state);
如果您在文件中發現任何不正確、與您使用特定功能時的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。