Partager via


Ajouter du code pour activer l’authentification unique pour les actions universelles des cartes adaptatives

Les étapes d’authentification pour l’authentification unique (SSO) sont similaires à celles d’un bot dans Teams. Voici les étapes à suivre pour obtenir l’authentification unique dans l’action universelle des cartes adaptatives.

Remarque

Pour implémenter le flux d’authentification unique, vous devez disposer d’une conversation un-à-un déclarée pour votre bot dans le manifeste de l’application. Lorsqu’un utilisateur de l’application appelle le flux d’authentification unique via le protocole de carte Action.Execute adaptative, une invite s’affiche pour autoriser l’utilisateur de l’application à installer l’application dans une étendue personnelle s’il ne l’a pas installée.

Ajouter du code pour gérer un jeton d’accès

Vérifiez que vous avez configuré votre bot dans l’ID Microsoft Entra pour obtenir un jeton d’accès. Vous pouvez mettre à jour le code pour gérer le jeton d’accès pour les actions universelles de cartes adaptatives dans le bot.

S’il existe un jeton mis en cache, le bot utilise le même jeton. Si aucun jeton n’est disponible, la carte adaptative envoie une réponse d’appel au service de bot, qui envoie une carte OAuth avec les valeurs suivantes qui inclut un tokenExchangeResource pour désigner une opération d’authentification unique :

{
"statusCode": 401,
"type": "application/vnd.microsoft.activity.loginRequest",
"value": {
   "text": "Please sign-in",
   "connectionName": "<configured-connection-name>",
   "tokenExchangeResource": {
      "id": "<unique-indentifier>",
      "uri": "<application-or-resource-identifier>",
      "providerId": "<optional-provider-identifier>"
   },
   "buttons": [
      {
      "title": "Sign-In",
         "text": "Sign-In",
         "type": "signin",
         "value": "<sign-in-URL>"
      }
   ]
}
}

Le service de bot fournit la réponse d’appel au client Teams, qui utilise la tokenExchangeResource valeur et le jeton client Teams pour obtenir un jeton de la part ou un jeton échangeable à partir de l’ID Microsoft Entra.

L’authentification unique échoue lorsque le client Teams ignore la tokenExchangeResource valeur pour une raison quelconque, y compris des valeurs non valides, des erreurs lors de la récupération des jetons échangeables ou si l’ID Microsoft Entra ne prend pas en charge la valeur. Ensuite, le client Teams déclenche la connexion nominale ou le flux OAuth. Il est recommandé de fournir une URL de connexion dans la réponse ci-dessus afin que le flux OAuth fonctionne.

Si l’utilisateur de l’application utilise une carte adaptative pour la première fois, il doit donner son consentement pour que l’application utilise son identité. La boîte de dialogue suivante s’affiche :

Capture d’écran montrant la boîte de dialogue de consentement.

Lorsque l’utilisateur de l’application sélectionne Afficher et accepter, la vue de consentement d’autorisation Microsoft Entra existante apparaît pour afficher toutes les autorisations. L’utilisateur de l’application peut continuer avec le flux d’authentification.

Ajouter du code pour recevoir le jeton

  1. Le client Teams envoie à nouveau l’original adaptiveCard/action au bot avec le jeton comme suit :

    {
    "type": "invoke",
    "name": "adaptiveCard/action"
    "value": {
    "action": {
       "id": "abc123",
       "type": "Action.Execute",
       "verb": "saveCommand",
       "data": {
          "firstName": "Jeff",
          "lastName": "Derstadt"
       }
    },
    "authentication": {
       "id": "8769-xyz",
       "connectionName": "oauthConnection",
       "token": "...single sign-on token..."
    }
    }
    }
    

    L’extrait de code suivant montre comment recevoir une activité d’appel dans le service bot :

            protected override async Task<InvokeResponse> OnInvokeActivityAsync(ITurnContext<IInvokeActivity> turnContext, 
         CancellationToken cancellationToken)
            {
              JObject value = JsonConvert.DeserializeObject<JObject>
              (turnContext.Activity.Value.ToString());
              JObject authentication = null;
              if (value["authentication"] != null)
              {
              authentication = JsonConvert.DeserializeObject<JObject>(value["authentication"].ToString());
              }
            }
    
  2. Le client Teams envoie une demande d’appel au bot. Le bot reçoit le consentement des utilisateurs de l’application et utilise leur identité pour aider le processus d’échange de jetons avec le service de jeton de l’infrastructure du bot et l’ID Microsoft Entra. Le service de jeton bot framework fournit le jeton d’accès des utilisateurs de l’application au bot.

    • Le service bot ignore le jeton d’accès si la valeur est incorrecte.

    • Le service de bot qui rencontre une erreur lors de l’échange de jetons doit répondre avec une erreur ou une deuxième demande de connexion qui n’inclut pas d’informations d’authentification unique. Si le service de bot répond avec une erreur, l’erreur doit être :

       {
        "statusCode" = 412,
        "type" = "application/vnd.microsoft.error.preconditionFailed",
        "value" = {
          "code" = "412",
          "message" = "authentication token expired"    }
          }
      
    • En cas d’échec de l’authentification unique, le client Teams affiche un bouton de connexion dans le pied de page de la carte pour lancer le flux de connexion nominal.

  3. Le bot utilise le jeton d’accès pour le compte de l’utilisateur de l’application pour effectuer ses actions.

  4. Le bot retourne une réponse sans erreur au client Teams à l’aide d’une carte ou d’un message.

Remarque

Pour gérer le jeton d’accès au cas où l’utilisateur de l’application se déconnecte, consultez Gérer la déconnexion de l’utilisateur de l’application.

Exemple de code

Exemple de nom Description .NET Node.js Manifeste
Authentification unique pour vos actions universelles de cartes adaptatives Cet exemple de code montre comment activer l’authentification unique pour vos actions universelles de cartes adaptatives dans le bot. View View View

Voir aussi