Sobre o logon único

APLICA-SE A: SDK v4

O logon único (SSO) permite que o acesso a recursos seja compartilhado entre aplicativos independentes. Por exemplo, um usuário poderia entrar em um serviço em um bot raiz que poderia compartilhar o token de acesso com um bot de habilidade. No momento, há suporte apenas para o provedor de identidade do Microsoft Entra ID.

O SSO se aplica aos seguintes cenários:

  • Um bot raiz e um ou mais bots de habilidade. O usuário entra com o bot raiz. O bot então invoca várias habilidades no nome do usuário.
  • Um controle de Webchat incorporado em um site. O usuário inicia uma sessão no site. O site então invoca um bot ou uma habilidade em nome do usuário.

O SSO oferece as seguintes vantagens:

  • O usuário não precisa iniciar uma sessão várias vezes.
  • O bot raiz ou site não precisa saber as permissões do usuário.

Observação

O SSO está disponível no SDK do Bot Framework versão 4.8 e posterior.

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 ilustra o fluxo de bot raiz.

    SSO sequence diagram for a root bot.

  • O diagrama a seguir ilustra o fluxo e o fluxo de fallback para um controle de Webchat.

    SSO sequence diagram for a Web Chat control.

    Se a troca de token falhar, a alternativa será solicitar ao usuário que inicie uma sessão. Essas falhas podem acontecer quando permissões extras são necessárias ou o token é para o serviço errado.

Vamos analisar o fluxo.

  1. O cliente inicia uma conversa com o bot disparando um cenário de 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 ao usuário e verifica se ele contém uma propriedade TokenExchangeResource.

  4. Se a propriedade existir, o cliente enviará um TokenExchangeInvokeRequest ao bot. O cliente deve ter um token intercambiável para o usuário, que deve ser um token do Microsoft Entra ID e cujo público-alvo deve ser o mesmo que o da propriedade TokenExchangeResource.Uri. 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 um TokenExchangeInvokeResponse ao 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 isn't 200, null otherwise>"
        }
    }
    
  6. Se o TokenExchangeInvokeResponse tiver um status de 200, o cliente não mostrará o cartão OAuth. Confira o diagrama fluxo normal. Para qualquer outro status ou se o TokenExchangeInvokeResponse não for recebido, o cliente mostrará o cartão OAuth ao usuário. Confira o diagrama de fluxo de fallback. Isso verifica se o fluxo de SSO volta ao fluxo de OAuthCard normal em caso de erros ou dependências não atendidas, como o consentimento do usuário.

Próximas etapas