Sinal único com um Web Chat
APLICA-SE A: SDK v4
O logon único (SSO) permite que um cliente, como um controle de Web Chat, se comunique com um bot em nome do usuário. Atualmente, apenas o provedor de identidade Microsoft Entra ID é suportado.
Normalmente, um Web Chat é incorporado em uma página do site. Quando o usuário entra no site, o Web Chat invoca um bot em nome do usuário. O token do cliente do site, baseado nas credenciais do usuário, é trocado por outro para acessar o bot. Desta forma, o utilizador não tem de iniciar sessão 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 Web Chat.
Em caso de falha, o SSO retorna ao comportamento existente de mostrar a placa OAuth . A falha pode ocorrer quando o consentimento do usuário é necessário ou quando a troca de token falha.
Vamos analisar o fluxo.
O utilizador inicia sessão no website.
Uma atividade de gatilho OAuth é recebida pelo Web Chat.
O Web Chat 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 Web Chat.
O Web Chat interceta o cartão OAuth antes de exibi-lo ao usuário e verifica se ele contém uma
TokenExchangeResource
propriedade.Se a propriedade existir, o Web Chat deve obter um token trocável para o usuário, que deve ser um token de ID do Microsoft Entra.
O Web Chat 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 bot (from the OAuth Card)>", "token": "<exchangeable token>" } }
O bot processa emitindo
TokenExchangeInvokeRequest
uma solicitação ao Serviço de Bot do Azure AI para obter um token intercambiável.O Serviço de Bot do Azure AI envia o token para o bot.
O bot retorna um
TokenExchangeInvokeResponse
retorno ao Web Chat. O Web Chat aguarda até receber oTokenExchangeInvokeResponse
arquivo .{ "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
, então o Web Chat não mostra o cartão OAuth. Para qualquer outrostatus
ou se oTokenExchangeInvokeResponse
não for recebido, o Web Chat mostra o cartão OAuth para o usuário. Isso garante que o fluxo SSO volte ao fluxo 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, consulte este exemplo de SSO.