共用方式為


關於單一登錄

適用於: SDK v4

單一登錄 (SSO) 允許跨獨立應用程式共享資源。 例如,使用者可以登入根 Bot 中的服務,而根 Bot 可以與技能 Bot 共用存取令牌。 目前僅 支援Microsoft Entra ID 識別提供者。

SSO 適用於下列案例:

  • 根 Bot 和一或多個技能 Bot。 使用者從根 Bot 登入。 接著,Bot 會代表使用者叫用多個技能。
  • 內嵌在網站上的 網路聊天 控件。 用戶從網站登入。 然後,網站會代表使用者叫用 Bot 或技能。

SSO 提供下列優點:

  • 使用者不需要多次登入。
  • 根 Bot 或網站不需要知道使用者的許可權。

注意

SSO 適用於 Bot Framework SDK 4.8 版和更新版本。

SSO 元件互動

下列時間順序圖顯示 SSO 各種元件之間的互動。

  • 下圖說明根 Bot 的流程。

    根 Bot 的 SSO 順序圖。

  • 下圖說明 網路聊天 控件的流程和後援流程。

    網路聊天 控件的 SSO 順序圖表。

    如果令牌交換失敗,後援會提示使用者登入。 當需要額外的許可權或令牌用於錯誤的服務時,可能會發生這類失敗。

讓我們分析流程。

  1. 用戶端會開始與觸發 OAuth 案例的 Bot 進行交談。

  2. Bot 會將 OAuth 記憶卡傳回給用戶端。

  3. 用戶端會在向用戶顯示 OAuth 卡片之前攔截 OAuth 卡片,並檢查它是否包含 TokenExchangeResource 屬性。

  4. 如果屬性存在,用戶端會將 傳送 TokenExchangeInvokeRequest 至 Bot。 客戶端必須有用戶可交換的令牌,該令牌必須是Microsoft Entra ID 令牌,且其對象必須與屬性相同 TokenExchangeResource.Uri 。 用戶端會將 Invoke 活動傳送至 Bot,本文如下所示。

    {
        "type": "Invoke",
        "name": "signin/tokenExchange",
        "value": {
            "id": "<any unique ID>",
            "connectionName": "<connection Name on the skill bot (from the OAuth Card)>",
            "token": "<exchangeable token>"
        }
    }
    
  5. Bot 會處理 TokenExchangeInvokeRequest ,並將 傳回 TokenExchangeInvokeResponse 給用戶端。 客戶端應該等到它收到 為止 TokenExchangeInvokeResponse

    {
        "status": "<response code>",
        "body": {
            "id":"<unique ID>",
            "connectionName": "<connection Name on the skill bot (from the OAuth Card)>",
            "failureDetail": "<failure reason if status code isn't 200, null otherwise>"
        }
    }
    
  6. TokenExchangeInvokeResponse如果 具有 status200,則用戶端不會顯示 OAuth 卡片。 請參閱一般流程圖。 若為任何其他statusTokenExchangeInvokeResponse或未收到 ,則用戶端會向用戶顯示 OAuth 卡片。 請參閱後援流程圖。 這可確保 SSO 流程會回復為一般的 OAuthCard 流程,如果有任何錯誤或未滿足相依性,例如使用者同意。

下一步