Authentification utilisateur

S'APPLIQUE À : SDK v4

Il arrive qu'un bot doive accéder à des ressources en ligne sécurisées pour le compte de l'utilisateur, par exemple pour consulter son e-mail, vérifier les informations sur le vol ou passer une commande. L'utilisateur doit autoriser le bot à agir en son nom et, pour ce faire, il doit authentifier son identité. OAuth est utilisé pour authentifier l'utilisateur et autoriser le bot à agir en son nom. Consultez également Type d'authentification.

Si vous souhaitez parfaire vos connaissances concernant OAuth, consultez les ressources suivantes :

Authentification de l’utilisateur dans une conversation

Pour effectuer certaines opérations pour le compte d’un utilisateur, telles que consulter les messages, faire référence à un calendrier, vérifier l’état d’un vol ou passer une commande, le bot doit appeler un service externe, tel que Microsoft Graph, GitHub ou le service REST d’une société. Chaque service externe dispose d’un moyen de sécuriser ces appels. Une méthode courante pour émettre ces demandes consiste à utiliser un jeton utilisateur qui identifie l’utilisateur de façon unique sur ce service externe (parfois appelé JSON Web Token (JWT)).

Pour sécuriser l’appel à un service externe, le bot doit demander à l’utilisateur de se connecter afin qu’il puisse obtenir le jeton de l’utilisateur pour ce service. De nombreux services prennent en charge la récupération de jeton par le biais du protocole OAuth ou OAuth2.

Azure AI Bot Service fournit des cartes de connexion spécialisées et des services qui fonctionnent avec le protocole OAuth et gèrent le cycle de vie des jetons. Un bot peut utiliser ces fonctionnalités pour acquérir un jeton utilisateur.

  • Dans le cadre de la configuration du bot, une connexion OAuth est inscrite au sein de la ressource Azure AI Bot Service dans Azure.

    La connexion contient des informations sur le fournisseur d’identité à utiliser ainsi qu’un secret et un ID client OAuth valide, les étendues OAuth à activer et d’autres métadonnées de connexion exigées par ce fournisseur d’identité.

  • Dans le code du bot, la connexion OAuth est utilisée pour favoriser la connexion de l’utilisateur et obtenir le jeton utilisateur.

L’image suivante montre les éléments impliqués dans le processus d’authentification.

Diagram illustrating the relationship between authentication components in Azure AI Bot Service.

À propos du service de jetons Bot Framework

Le service de jetons Bot Framework a les responsabilités suivantes :

  • Faciliter l’utilisation du protocole OAuth avec un large éventail de services externes.
  • Stocker de façon sécurisée des jetons pour un bot, canal, conversation et utilisateur particuliers.
  • Acquisition de jetons utilisateur.

    Conseil

    Si le jeton utilisateur du bot a expiré, le bot doit :

    • Déconnecter l’utilisateur
    • Relancer le flux de connexion.

Par exemple, un bot qui peut vérifier les e-mails récents d'un utilisateur, à l'aide de l'API Microsoft Graph, a besoin d'un jeton d'utilisateur provenant d'un fournisseur d'identité, en l'occurrence Microsoft Entra ID. Au moment de la conception, le développeur du bot effectue ces deux étapes importantes :

  1. Enregistre une application Microsoft Entra ID, un fournisseur d'identité, avec le service de jetons Bot Framework, à l'aide du portail Azure.
  2. Il configure une connexion OAuth (nommée GraphConnection, par exemple) pour le bot.

L’image suivante illustre la chronologie de l’interaction de l’utilisateur avec un bot quand une demande par e-mail est effectuée à l’aide du service Microsoft Graph.

Sequence diagram outlining the steps for a bot to send an email on behalf of a user.

  1. L’utilisateur envoie une demande par e-mail au bot.

  2. Une activité avec ce message est envoyée de l’utilisateur au service de canal Bot Framework. Le service de canal garantit que le champ userid au sein de l’activité a été défini et que le message est envoyé au bot.

    Remarque

    Les ID d’utilisateur sont propres au canal. Il peut s’agir de l’ID Facebook de l’utilisateur ou de son numéro de téléphone pour l’envoi de SMS.

  3. Le bot demande au service de jetons Bot Framework s’il a déjà un jeton pour l’ID d’utilisateur pour la connexion OAuth GraphConnection.

  4. Dans la mesure où il s'agit de la première fois où cet utilisateur a eu une interaction avec le bot, le service de jetons Bot Framework ne dispose pas encore d'un jeton pour cet utilisateur et retourne un résultat NotFound au bot.

    Remarque

    Si le jeton est trouvé, les étapes d’authentification sont ignorées et le bot peut effectuer la demande par e-mail à l’aide du jeton stocké.

  5. Le bot crée une carte OAuthCard avec le nom de connexion GraphConnection et répond à l’utilisateur en lui demandant de se connecter à l’aide de cette carte.

  6. L’activité passe par le service de canal Bot Framework, qui appelle le service de jetons Bot Framework pour créer une URL de connexion OAuth valide pour cette demande. Cette URL de connexion est ajoutée à la carte OAuthCard et celle-ci est renvoyée à l’utilisateur.

  7. L’utilisateur reçoit un message lui demandant de se connecter en cliquant sur le bouton de connexion de la carte OAuth.

  8. Lorsque l’utilisateur clique sur le bouton de connexion, le service de canal ouvre un navigateur web et appelle le service externe pour charger sa page de connexion.

  9. L’utilisateur se connecte à cette page pour le service externe. Ensuite, le service externe termine l’échange de protocole OAuth avec le service de jetons Bot Framework, puis le service externe envoie au service de jetons Bot Framework le jeton utilisateur. Le service de jetons Bot Framework stocke ce jeton de façon sécurisée et envoie une activité au bot avec ce jeton.

  10. Le bot reçoit l’activité avec le jeton et peut ensuite l’utiliser pour effectuer des appels sur l’API MS Graph.

Sécurisation de l’URL de connexion

Lorsque Bot Framework facilite la connexion de l’utilisateur, il est important de prendre en considération comment sécuriser l’URL de connexion. Lorsqu’un utilisateur reçoit une URL de connexion, cette URL est associée à un ID de conversation et un ID d’utilisateur spécifiques pour ce bot. Ne partagez pas cette URL, car elle entraînerait une mauvaise connexion pour une conversation particulière avec le bot. Pour limiter les attaques de sécurité utilisant une URL de connexion partagée, assurez-vous que la machine et la personne qui clique sur l'URL de connexion est la personne qui possède la fenêtre de conversation.

Certains canaux comme Microsoft Teams, Direct Line et WebChat peuvent fonctionner ainsi sans que l'utilisateur s'en rende compte. Par exemple, WebChat utilise des cookies de session pour s’assurer que le flux de connexion a lieu dans le même navigateur que la conversation WebChat. Toutefois, pour les autres canaux, l’utilisateur reçoit souvent un code magique à 6 chiffres. Cette opération est similaire à l'authentification multifacteur intégrée, car le service de jetons Bot Framework ne transmet pas le jeton au bot, sauf si l'utilisateur termine l'authentification finale. Ainsi il est prouvé que la personne qui s'est connectée a accès à l'expérience de conversation en entrant le code à 6 chiffres.

Important

Gardez à l’esprit ces considérations de sécurité importantes. Vous trouverez des informations supplémentaires dans ce billet de blog : Utilisation de WebChat avec l'authentification Azure AI Bot Service.

Étapes suivantes

Puisque vous connaissez désormais l'authentification utilisateur, examinons comment l'appliquer à votre bot.

Voir aussi