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.
O diagrama a seguir ilustra o fluxo e o fluxo de fallback para um controle de Webchat.
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.
O cliente inicia uma conversa com o bot disparando um cenário de OAuth.
O bot envia de volta um Cartão OAuth para o cliente.
O cliente intercepta o cartão OAuth antes de exibi-lo ao usuário e verifica se ele contém uma propriedade
TokenExchangeResource
.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 propriedadeTokenExchangeResource.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>" } }
O bot processa o
TokenExchangeInvokeRequest
e retorna umTokenExchangeInvokeResponse
ao cliente. O cliente deve aguardar até receber oTokenExchangeInvokeResponse
.{ "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>" } }
Se o
TokenExchangeInvokeResponse
tiver umstatus
de200
, o cliente não mostrará o cartão OAuth. Confira o diagrama fluxo normal. Para qualquer outrostatus
ou se oTokenExchangeInvokeResponse
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.