自訂 OAuth 提供者

管理員指南

自訂 OAuth 提供者

新增任何符合 OIDC 標準的自訂登入方式

除了內建的 OAuth 提供者外,Root 可以新增任何符合 OIDC 標準的自訂登入方式。使用 Root 帳號登入後,進入系統設定頁面(`/console/setting`),找到「自訂 OAuth」區域。Web 控制台與參考設計一致,正在串接中;目前示範資料與登入頁透過 localStorage 連動。

新增自訂 OAuth 提供者

easyapi.com/console/setting#custom-oauth

自訂 OAuth 提供者

設定自訂 OAuth 提供者,支援 GitHub Enterprise、GitLab、Gitea、NextCloud、Keycloak、Casdoor 等相容 OAuth 2.0 / OpenID Connect 協定的身分提供者。 回呼 URL 格式:{網站位址}/oauth/{slug}

+ 新增 OAuth 提供者
圖標名稱Slug狀態Client ID操作
尚無自訂 OAuth 提供者

系統設定底部「自訂 OAuth」區域示意:說明橫幅、新增按鈕與空列表

進入設定區域

Root 登入後進入 /console/setting ,捲動至頁面底部「自訂 OAuth 提供者」卡片。與 系統設定 其他 Tab 同屬 option / custom_oauth_provider 設定範疇。

新增提供者

點擊「+ 新增 OAuth 提供者」開啟表單,填寫名稱、Slug、Client ID/Secret 與 OAuth 端點。Slug 建立後不建議修改,否則需在 IdP 端同步更新回呼 URL。

回呼 URL 格式

在 IdP 應用程式設定中將 Redirect URI 設為:

{網站位址}/oauth/{slug}

其中「網站位址」為系統設定中的 ServerAddress(如 https://ai.example.com),{slug} 與表單中 Slug 欄位一致。

提供者列表

欄欄位說明
圖標icon提供者 Logo URL 或圖標標識
名稱name登入按鈕顯示名稱,如「企業 GitLab」
Slugslug唯一標識,用於回呼路徑 `/oauth/{slug}`
狀態enabled啟用後出現在登入/註冊頁第三方區域
Client IDclient_id在 IdP 註冊應用程式後取得的用戶端 ID(列表中可遮蔽顯示)
操作—編輯、啟用/停用、刪除

設定 Client ID / Secret

  1. 在 IdP(GitLab、Keycloak 等)建立 OAuth / OIDC 應用程式,記錄 Client ID 與 Client Secret。
  2. 將回呼 URL 設定為 `{ServerAddress}/oauth/{slug}`,slug 與 EasyAPI 中填寫的 Slug 完全一致。
  3. 在 EasyAPI 系統設定 → 自訂 OAuth →「新增 OAuth 提供者」填寫端點與 scopes;若提供 well_known 可簡化端點設定。
  4. 儲存後啟用(enabled=1);僅 enabled 的提供者會出現在 `/login` 與 `/register` 底部第三方區域。

表單欄位說明

設定項欄位說明
名稱name必填;顯示在登入按鈕上
Slugslug必填;小寫英文,全域唯一,決定回呼 URL 路徑
圖標icon選填;圖標 URL
Client IDclient_idOAuth 應用程式 Client ID
Client Secretclient_secretOAuth 應用程式密鑰,儲存後不在列表中明文顯示
授權端點authorization_endpointOAuth authorize URL
Token 端點token_endpointOAuth token URL
使用者資訊端點user_info_endpoint取得使用者 profile 的 API
Scopesscopes預設 openid profile email,依 IdP 要求調整
Well-Knownwell_known選填;OIDC `.well-known/openid-configuration` 位址,可自動探索端點
使用者 ID 欄位user_id_field從 userinfo JSON 讀取唯一 ID 的鍵,預設 sub
使用者名稱欄位username_field對應為系統 username,預設 preferred_username
顯示名稱欄位display_name_field對應為 nickname,預設 name
電子郵件欄位email_field對應為 email,預設 email
授權樣式auth_style0=以參數傳遞 client_secret;1=以 Header 傳遞(部分 IdP 要求)
存取策略access_policy選填 JSON;限制允許登入的使用者範圍
拒絕提示access_denied_message策略拒絕時向使用者顯示的文案

資料表 custom_oauth_provider 欄位與上述表單一一對應;slug 欄有唯一索引。

端點與 scopes

  • 標準 OIDC:填寫 well_known 後可自動解析 authorization / token / userinfo 端點
  • 純 OAuth 2.0:需手動填寫 authorization_endpoint、token_endpoint、user_info_endpoint
  • Scopes 範例:openid profile email(OIDC)或 read:user user:email(GitHub)
  • 內建 OAuth 路由:GET /api/oauth/github、wechat 等與自訂 /oauth/{slug} 並存,互不影響

測試 OAuth 回呼

  1. 登出目前帳號,開啟 `/login`,確認底部出現剛新增的 OAuth 按鈕。
  2. 點擊按鈕應跳轉至 IdP 授權頁;授權成功後回跳 `{網站位址}/oauth/{slug}` 並完成登入或註冊綁定。
  3. 在「個人設定 → 帳戶綁定」驗證第三方帳號是否已關聯。
  4. 若失敗,檢查 Client Secret、回呼 URL、scopes 及 userinfo 欄位對應是否與 IdP 回傳的 JSON 一致。

使用者端 OAuth 登入說明見 註冊與登入 文件中的「第三方 OAuth 登入」章節。

相關說明

  • 系統設定概覽見 系統設定
  • 帳戶綁定見 個人設定(/setting)
  • 僅 enabled=1 的提供者會出現在登入頁;停用後已綁定的使用者不受影響