Logon único

APLICA-SE A: SDK v4

O SSO (logon único) permite que um cliente, como assistente virtual, WebChat e assim por diante, se comunique com um bot ou habilidade em nome do usuário. Atualmente, há suporte apenas para o provedor de identidade do Azure AD v2 .

O SSO se aplica aos seguintes cenários:

  • Assistente virtual e um ou mais bots de habilidades. O usuário pode entrar uma vez no assistente virtual. Em seguida, o assistente invoca várias habilidades em nome do usuário. Consulte também o Assistente virtual.
  • Webchat inserido em um site. O usuário entra no site. Em seguida, o site invoca um bot ou uma habilidade em nome do usuário.

O SSO oferece as seguintes vantagens:

  • O usuário não precisa fazer logon novamente, se já tiver entrado em um assistente virtual ou site.
  • O assistente virtual ou site não tem conhecimento das permissões do usuário.

Nota

O SSO é um novo recurso no SDK do Bot Framework v4.8.

Interação de componentes de SSO

Os diagramas de sequência de tempo a seguir mostram as interações entre os vários componentes do SSO.

  • O diagrama a seguir mostra um fluxo normal ao usar um cliente de assistente virtual.

    bot sso va

  • O exemplo a seguir mostra um fluxo normal e de fallback ao usar um cliente WebChat.

    bot sso webchat

    No caso de falha, o SSO volta para o comportamento existente de mostrar o cartão OAuth. A falha pode ser causada, por exemplo, se o consentimento do usuário for necessário ou se a troca de token falhar.

Vamos analisar o fluxo.

  1. O cliente inicia uma conversa com o bot disparando um cenário OAuth.

  2. O bot envia de volta um cartão OAuth para o cliente.

  3. O cliente intercepta o cartão OAuth antes de exibi-lo para o usuário e verifica se ele contém uma TokenExchangeResource propriedade.

  4. Se a propriedade expirar, o cliente enviará um TokenExchangeInvokeRequest para o bot. O cliente deve ter um token de troca para o usuário, que deve ser um token do Azure AD v2 e cujo público-alvo deve ser o mesmo que a TokenExchangeResource.Uri propriedade. O cliente envia uma atividade Invoke para o bot com o corpo mostrado abaixo.

    {
        "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. O bot processa o TokenExchangeInvokeRequest e retorna TokenExchangeInvokeResponse uma volta para o cliente. O cliente deve aguardar até receber o 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 is not 200, null otherwise>"
        }
    }
    
  6. Se tiver TokenExchangeInvokeResponse um de status200, o cliente não mostrará o cartão OAuth. Consulte o diagrama de fluxo normal. Para qualquer outro status ou se o TokenExchangeInvokeResponse não for recebido, o cliente mostrará o cartão OAuth para o usuário. Consulte o diagrama de fluxo de fallback . Isso garante que o fluxo de SSO volte ao fluxo OAuthCard normal, no caso de erros ou dependências não atenddas, como o consentimento do usuário.

Próximas etapas