Prise en charge de l' sign-on unique pour les extensions de messagerie

La prise en charge de l' sign-on unique (SSO) est désormais disponible pour les extensions de messagerie et le déploiement de liens. L’activation de l’authentification unique pour les extensions de messagerie par défaut actualise le jeton d’authentification, ce qui réduit le nombre de fois que vous devez entrer les informations d’identification de connexion pour Microsoft Teams.

Ce document vous guide sur la façon d’activer l’authentification sso et de stocker votre jeton d’authentification, si nécessaire.

Configuration requise

La condition préalable à l’activer pour les extensions de messagerie et le déploiement des liens est la suivante :

  • Vous devez avoir un compte Azure.
  • Vous devez configurer votre application via le portail AAD et mettre à jour le manifeste de votre application Teams tel que défini dans enregistrer votre application via le portail AAD.

Notes

Pour plus d’informations sur la création d’un compte Azure et la mise à jour du manifeste de votre application, consultez la prise en charge de l' sign-on unique (SSO) pour les bots.

Une fois les conditions préalables terminées, vous pouvez activer l’ingso pour les extensions de messagerie et le déploiement des liaisons.

Pour activer l' utilisateur SSO

  1. Mettez à jour les détails de connexion OAuth de vos bots dans le portail Azure.

  2. Téléchargez l’exemple d’extensions de messagerie et suivez les instructions d’installation fournies par l’Assistant.

    Notes

    Utilisez la connexion OAuth de vos bots lors de la configuration de vos extensions de messagerie.

  3. Dans le fichier TeamsMessagingExtensionsSearchAuthConfigBot.cs, mettez à jour la valeur de l’th à silentAuth dans et / ou OnTeamsMessagingExtensionQueryAsync OnTeamsAppBasedLinkQueryAsync .

    Notes

    Nous ne tenons pas d’autres sso de handlers, à l’exception du fichier OnTeamsMessagingExtensionQueryAsync OnTeamsAppBasedLinkQueryAsync TeamsMessagingExtensionsSearchAuthConfigBot.cs.

  4. Vous recevez le jeton dans le handler dans la charge utile ou dans le , en fonction du scénario pour lequel vous activez l' OnTeamsMessagingExtensionQueryAsync turnContext.Activity.Value cesso OnTeamsAppBasedLinkQueryAsync :

    JObject valueObject=JObject.FromObject(turnContext.Activity.Value);
    if(valueObject["authentication"] !=null)
     {
        JObject authenticationObject=JObject.FromObject(valueObject["authentication"]);
        if(authenticationObject["token"] !=null)
     }
    
    

    Si vous utilisez la connexion OAuth, ajoutez le code suivant au fichier TeamsMessagingExtensionsSearchAuthConfigBot.cs pour mettre à jour ou ajouter le jeton dans le magasin :

    protected override async Task<InvokeResponse> OnInvokeActivityAsync(ITurnContext<IInvokeActivity> turnContext, CancellationToken cancellationToken)
         {
             JObject valueObject = JObject.FromObject(turnContext.Activity.Value);
             if (valueObject["authentication"] != null)
             {
                 JObject authenticationObject = JObject.FromObject(valueObject["authentication"]);
                 if (authenticationObject["token"] != null)
                 {
                     //If the token is NOT exchangeable, then return 412 to require user consent
                     if (await TokenIsExchangeable(turnContext, cancellationToken))
                     {
                         return await base.OnInvokeActivityAsync(turnContext, cancellationToken).ConfigureAwait(false);
                     }
                     else
                     {
                         var response = new InvokeResponse();
                         response.Status = 412;
                         return response;
                     }
                 }
             }
             return await base.OnInvokeActivityAsync(turnContext, cancellationToken).ConfigureAwait(false);
         }
         private async Task<bool> TokenIsExchangeable(ITurnContext turnContext, CancellationToken cancellationToken)
         {
             TokenResponse tokenExchangeResponse = null;
             try
             {
                 JObject valueObject = JObject.FromObject(turnContext.Activity.Value);
                 var tokenExchangeRequest =
                 ((JObject)valueObject["authentication"])?.ToObject<TokenExchangeInvokeRequest>();
                 var userTokenClient = turnContext.TurnState.Get<UserTokenClient>();
                 tokenExchangeResponse = await userTokenClient.ExchangeTokenAsync(
                                 turnContext.Activity.From.Id,
                                  _connectionName,
                                  turnContext.Activity.ChannelId,
                                  new TokenExchangeRequest
                  {
                      Token = tokenExchangeRequest.Token,
                  },
                   cancellationToken).ConfigureAwait(false);
             }
     #pragma warning disable CA1031 //Do not catch general exception types (ignoring, see comment below)
             catch
     #pragma warning restore CA1031 //Do not catch general exception types
             {
                 //ignore exceptions
                 //if token exchange failed for any reason, tokenExchangeResponse above remains null, and a failure invoke response is sent to the caller.
                 //This ensures the caller knows that the invoke has failed.
             }
             if (tokenExchangeResponse == null || string.IsNullOrEmpty(tokenExchangeResponse.Token))
             {
                 return false;
             }
             return true;
         }
    
    

Voir aussi