Logon único com um Webchat
APLICA-SE A: SDK v4
O logon único (SSO) permite que um cliente, como um controle do Webchat, se comunique com um bot em nome do usuário. No momento, há suporte apenas para o provedor de identidade do Microsoft Entra ID.
Normalmente, um Webchat é incorporado em uma página do site. Quando o usuário faz login no site, o Webchat invoca um bot em nome do usuário. O token do cliente do site, com base nas credenciais do usuário, é trocado por um diferente para acessar o bot. Dessa forma, o usuário não precisa fazer login duas vezes: a primeira vez no site e a segunda vez no bot, daí o termo SSO.
O diagrama a seguir mostra o fluxo de SSO ao usar um cliente de Webchat.
Em caso de falha, o SSO volta ao comportamento existente de mostrar o cartão OAuth. A falha pode ocorrer quando o consentimento do usuário é necessário ou quando a troca de tokens falha.
Vamos analisar o fluxo.
O usuário faz login no site.
Uma atividade de gatilho do OAuth é recebida pelo Webchat.
O Webchat inicia uma conversa com o bot por meio de uma atividade de gatilho OAuth.
O bot envia de volta um cartão OAuth para o Webchat.
O Webchat intercepta o cartão OAuth antes de exibi-lo para o usuário e verifica se ele contém uma propriedade
TokenExchangeResource
.Se a propriedade existir, o Webchat deverá gerar um token intercambiável para o usuário, que deve ser um token do Microsoft Entra ID.
O Webchat envia uma atividade de invocar para o bot com o corpo mostrado abaixo.
{ "type": "Invoke", "name": "signin/tokenExchange", "value": { "id": "<any unique ID>", "connectionName": "<connection name on the bot (from the OAuth Card)>", "token": "<exchangeable token>" } }
O bot processa o
TokenExchangeInvokeRequest
emitindo uma solicitação para o Serviço de Bot de IA do Azure para obter um token intercambiável.O Serviço de Bot de IA do Azure envia o token para o bot.
O bot retorna um
TokenExchangeInvokeResponse
de volta ao Webchat. O Webchat aguarda até receber oTokenExchangeInvokeResponse
.{ "status": "<response code>", "body": { "id":"<unique ID>", "connectionName": "<connection Name on the bot (from the OAuth Card)>", "failureDetail": "<failure reason if status code isn't 200, null otherwise>" } }
Se o
TokenExchangeInvokeResponse
tiver umstatus
de200
, o Webchat não mostrará o cartão OAuth. Para qualquer outrostatus
ou se oTokenExchangeInvokeResponse
não for recebido, o Webchat mostrará o cartão OAuth ao usuário. 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.
Para obter um exemplo de implementação, confira este exemplo de SSO.