關於單一登入

適用于: 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 的流程。

    SSO sequence diagram for a root bot.

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

    SSO sequence diagram for a Web Chat control.

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

讓我們分析流程。

  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 流程,如果有任何錯誤或未滿足相依性,例如使用者同意。

下一步