概述
OIDC全稱為OpenID Connect,是一種基于OAuth 2.0協議的擴展。它允許客戶端應用程序在獲取訪問令牌的同時也能獲取關于最終用戶身份的信息。OIDC的主要目的是為了進行用戶身份驗證,同時也可以傳遞用戶屬性。
OIDC協議中主要有四種角色
(1)資源所有者:這是指實際的用戶,即系統中的真實個體,他們擁有訪問受保護資源的權限。
(2)客戶端:也被稱為依賴方 (Relying Party),是指希望訪問資源的應用程序。客戶端需要向認證服務器申請訪問令牌和ID Token。
(3)認證服務器 (ID Provider):負責處理用戶的認證和授權請求。它會驗證用戶的身份,并在認證成功后發放訪問令牌和ID Token給客戶端。
(4)業務后端服務:存儲受保護資源的服務器,這些資源只能通過有效的訪問令牌訪問。資源服務器會檢查訪問令牌的有效性,以決定是否允許客戶端訪問資源。
典型的OIDC工作流程通常如下:
(1)客戶端應用向認證服務器請求授權,提供其客戶端ID和其他參數。
(2)請求被重定向到認證服務器并由用戶進行登錄。
(3)登錄成功后,用戶會被重定向回客戶端應用,并附帶一個授權碼(Authorization Code)。
(4)客戶端應用使用授權碼向認證服務器請求訪問令牌和ID Token。
(5)認證服務器返回訪問令牌和ID Token給客戶端應用。
(6)客戶端應用可以使用訪問令牌來訪問受保護的資源,同時使用ID Token來進行用戶身份驗證。
OIDC廣泛應用于單點登錄(SSO)場景中,用戶只需要在一個地方登錄就可以訪問多個不同的應用程序和服務。
在云原生網關中支持配置OIDC策略,云原生網關作為客戶端實現OIDC認證,流程如下
OIDC策略配置
前置條件
- 部署好身份認證服務(IDP)
- 在IDP中為云原生網關申請客戶端(clientid,client secret等)
OIDC策略配置
在 安全認證 > 認證鑒權菜單下,選擇創建鑒權,鑒權類型選擇OIDC,填寫相關參數即可;參數說明如下
| 參數 | 說明 |
|---|---|
| clientId | 云原生網關作為OIDC客戶端的clientid。 |
| clientSecret | 云原生網關作為OIDC客戶端的client secret。 |
| discovery | OIDC配置發現端點,通常以 .well-known/openid-configuration 的形式附加在 OpenID Provider 的基礎 URL 上。 |
| realm | 對于一些IDP實現(如Keycloak),realm代表一個虛擬的邊界或環境,每個realm內有自己獨立的配置,用于實現邏輯上的隔離。 |
| redirectUri | IDP認證成功后重定向的uri。 |
| scope | IDP中定義的當前客戶端(云原生網關)可以訪問的范圍,比如openid scope 表示請求用戶的基本身份信息,而 profile 和 email 則分別表示請求更詳細的用戶資料和電子郵件地址。 |
| bearerOnly | 打開該選項時,網關只會對請求中的鑒權信息做校驗。 |
| sslVerify | 網關是否校驗IDP的證書信息。 |
| setAccessTokenHeader | 是否在轉發到后端的請求頭部中設置Access Token。 |
| accessTokenInAuthorizationHeader | setAccessTokenHeader為true時生效,如果打開則在Authorization頭部設置Access Token,否則在X-Access-Token頭部設置Access Token。 |
| setIdTokenHeader | 打開時將在轉發給后端的X-ID-Token頭部設置id token。 |
| setUserInfoHeader | 打開時將在轉發給后端的X-Userinfo頭部設置user info。 |
| logoutPath | 登出路徑。 |
| timeout | 網關和IDP通信的超時時間。 |
| introspectionEndpoint | token校驗端點。 |
| introspectionEndpointAuthMethod | 請求token校驗端點的方法。 |
| publicKey | token校驗的公鑰。 |
| tokenSigningAlgValuesExpected | token簽名校驗算法。 |