Partager via


Authentification unique avec un Chat Web

S'APPLIQUE À : SDK v4

L'authentification unique (SSO) permet à un client, tel qu'un contrôle de Chat Web, de communiquer avec un bot au nom de l'utilisateur. Actuellement, seul le fournisseur d'identité Microsoft Entra ID est pris en charge.

En règle générale, un Chat Web est incorporé dans une page de site Web. Lorsque l'utilisateur se connecte au site Web, le Chat Web invoque un bot pour le compte de l'utilisateur. Le jeton du client de site Web, axé sur les informations d'identification de l'utilisateur, est échangé pour qu'un autre utilisateur accède au bot. De cette façon, l'utilisateur n'a pas besoin de se connecter deux fois ; la première fois sur le site Web, et la deuxième fois sur le bot, par conséquent le terme SSO.

Le diagramme suivant montre le flux SSO lors de l'utilisation d'un client de Chat Web.

Sequence diagram for sign-on flow for Web Chat.

En cas de défaillance, le SSO reprend son comportement existant qui consiste à montrer la carte OAuth. La défaillance peut survenir lorsque le consentement de l'utilisateur est requis ou lorsque l'échange de jetons échoue.

Analysons le flux.

  1. L'utilisateur se connecte au site Web.

  2. Une activité de déclenchement de l'OAuth est reçue par le Chat Web.

  3. Le Chat Web démarre une conversation avec le bot à partir d'une activité de déclenchement de l'OAuth.

  4. Le bot renvoie une carte OAuth au Chat Web.

  5. Le Chat Web intercepte la carte OAuth avant de l'afficher pour l'utilisateur et vérifie si elle contient une propriété TokenExchangeResource.

  6. Si la propriété existe, le Chat Web doit obtenir un jeton échangeable pour l'utilisateur, qui doit être un jeton Microsoft Entra ID.

  7. Le Chat Web envoie une activité d'invocation au bot avec le corps indiqué ci-dessous.

    {
        "type": "Invoke",
        "name": "signin/tokenExchange",
        "value": {
            "id": "<any unique ID>",
            "connectionName": "<connection name on the bot (from the OAuth Card)>",
            "token": "<exchangeable token>"
        }
    }
    
  8. Le bot traite le TokenExchangeInvokeRequest en émettant une demande à Azure AI Bot Service pour obtenir un jeton échangeable.

  9. Azure AI Bot Service envoie le jeton au bot.

  10. Le bot renvoie un retour TokenExchangeInvokeResponse au Chat Web. Le Chat Web attend jusqu'à ce qu'il reçoive le TokenExchangeInvokeResponse.

    {
        "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>"
        }
    }
    
  11. Si le TokenExchangeInvokeResponse a une valeur de status sur 200, alors le Chat Web n'affiche pas la carte OAuth. Pour tout autre status ou si la réponse TokenExchangeInvokeResponse n'est pas reçue, le Chat Web montre la carte OAuth à l'utilisateur. Ceci permet de s’assurer que le flux SSO revient au flux OAuthCard normal en cas d’erreur ou si des dépendances comme le consentement de l’utilisateur ne sont pas satisfaites.

Pour un exemple de mise en œuvre, veuillez vous référer à cet échantillon de SSO.