IBM Cloud Docs
單一登入 (SSO)

單一登入 (SSO)

透過 Cloud Directory 的「單一登入 (SSO)」,您可以在多個 Web 應用程式之間提供順暢的鑑別體驗。 如果在使用者初次登入時已開啟 SSO,則下次使用者登入時,就不需要重新輸入其認證。 相反地,它們會自動登入到受同一個 App ID 實例保護的任何應用程式。

App ID 為 Cloud Directory 使用者提供 SSO。 如果您使用社交或聯合 SAML 身分提供者,SSO 將由該提供者管理,App ID。

如何運作

請參閱下圖,以瞭解 SSO 的運作狀況。

SSO 圖
Cloud Directory SSO 流程

  1. Cloud Directory 使用者第一次登入您的應用程式。
  2. 會要求他們提供使用者名稱或電子郵件及密碼來進行鑑別。
  3. 如果認證有效,使用者就會登入您的應用程式。 同時,App ID 會建立一個階段作業,並在使用者的瀏覽器上設定 Cookie。
  4. 如果使用者嘗試登入其中一個其他應用程式,App ID 會偵測階段作業 Cookie 並自動將使用者登入您的應用程式。App ID 階段作業 Cookie 是實例專用的,並由實例的唯一私密金鑰簽署。

目前,Cloud Directory SSO 已配置為在 Cloud Directory 是已啟用的唯一身分提供者時有效。 如果 App ID 的實例配置為使用多個身分提供者,啟用 SSO 不會效果登錄流程。 使用者每次登錄時,系統都會提示使用者輸入其 Cloud Directory 認證或選擇其他某個提供者。

配置 SSO

您可以使用 App ID 儀表板或使用 API 來配置單一登入。

使用 GUI

您可以透過 GUI 來配置 SSO。

  1. 導覽至 App ID 儀表板的 Cloud Directory > 單一登入標籤。

  2. 啟用單一登入切換為已啟用

  3. 設定在 SSO 階段作業到期之前使用者可以處於非作用中狀態的時間量。 一旦到期,使用者就必須重新登入。 此時間是以分鐘為單位指定,無活動狀態的最長容許時間為 10,080 分鐘(7 天)。 預設時間為 1440 分鐘,相當於 1 天。

  4. 將您的重新導向 URI 新增至登出重新導向 URI 方框,然後按一下 + 符號。 請務必只登錄您信任的應用程式。 登錄此 URI,即表示您授權 App ID 將其包含在授權工作流程中。

  5. 按一下儲存

使用 API

透過使用「SSO 配置管理 API」來定義三項設定,您就可以開啟該特性。

範例呼叫:

{
  "isActive": true,
  "inactivityTimeoutSeconds": 86400,
  "logoutRedirectUris": [
    "http://my-first-app.com/after_logout",
    "http://my-second-app.com/after_logout"
  ]
}
單一登入配置設定
設定 定義
isActive 若要啟用 SSO,請將此值設定為 true。 預設值是 false
inactivityTimeoutSeconds 在要求使用者重新輸入其認證之前,允許沒有任何使用者活動的最長時間。 此值以秒為單位指定,最大為 604800 seconds (7 天)。 預設值為 86400 seconds (1 天)。
logoutRedirectUris App ID 可以在使用者登出之後將使用者重新導向至其中的已容許 URI 逗點區隔清單。

配置登出

您可以使用 App ID 來結束現行瀏覽器的使用者 SSO 階段作業。 如果使用者的瀏覽器存取 API 端點,則會終止其階段作業,並提示使用者在該瀏覽器的下一次登入嘗試中輸入其認證 - 針對您的任何應用程式。

當啟動與變更、重設或更新密碼相關的其中一個流程時,會針對使用者自動終止所有用戶端的階段作業。

透過使用 API

若要登出使用者,請使用您的資訊來完成下列 API 呼叫,以重新導向其瀏覽器。

https://<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>/cloud_directory/sso/logout?redirect_uri=<redirectURI>&client_id=<clientID>
SSO 註銷 API 呼叫變數
變數
region 在其中佈建 App ID 實例的地區。 進一步瞭解 可用地區
tenantID App ID 實例的唯一 ID。 您可以在 App ID 面板的服務憑證索引標籤中找到此值。 如果您沒有一組服務認證,則可以建立一組服務認證,並從中取得值。
redirectURI 您透過 App ID 儀表板在 SSO 配置中指定的 URI。 基於安全理由,如果您未指定值,則重新導向就無法進行,而且會顯示錯誤。
clientID 應用程式的用戶端 ID。

即使已結束 SSO 階段作業,具有其階段作業所儲存之有效存取記號的使用者,在其記號到期之前,可能不需要再次輸入其認證。 依預設,記號會在 1 小時後到期。

透過使用 Node.JS 伺服器 SDK

您也可以使用 App ID Node.js 伺服器 SDK 為您自動處理重新導向。

  1. logoutSSO 設為方法。 例如:

    let webAppStrategy = new WebAppStrategy(.....);
    ....
    webAppStrategy.logoutSSO();
    
  2. 配置登出。

    app.get('/logoutSSO', (req, res) => {
       res.clearCookie("refreshToken");
       webAppStrategy.logoutSSO(req,res, { "redirect_uri": "https://my-app.com/after_logout" });
       });
    

結束使用者的所有階段作業

作為管理者,您可以使用 App ID 管理 API 來結束任何使用者的所有 SSO 階段作業。 這些 API 受到 Cloud IAM 記號保護。

API 要求範例:

POST https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/Users/<userID>/sso/logout
Headers:
Authorization: Bearer <IAMToken>
Content-Type: application/json
結束使用者的所有 SSO 會話所需的變量
變數
Content-Type 您要求的內容類型。 可接受的值是 application/json
region 在其中佈建 App ID 實例的地區。 進一步瞭解 可用地區
tenantID App ID 實例的唯一 ID。 您可以在 App ID 面板的服務憑證索引標籤中找到此值。 如果您沒有一組服務認證,則可以建立一組服務認證,並從中取得值。
userID Cloud Directory 使用者的唯一 ID。 您可以使用 Cloud Directory 使用者 API 或檢視使用者的身分記號來取得 ID。

當您呼叫此 API 時,所有指定使用者的 SSO 會話都會失效。 這意味著下次該使用者試圖從任何裝置或瀏覽器登入到任何應用程式時,都需要重新輸入其認證。