Unterstützung für einmaliges Anmelden für Messaging-Erweiterungen

SSO-Unterstützung (Single Sign-On) ist jetzt für Messaging-Erweiterungen und die Verbreitung von Links verfügbar. Wenn Sie das einmalige Anmelden für Messaging-Erweiterungen standardmäßig aktivieren, wird das Authentifizierungstoken aktualisiert. Dadurch wird minimiert, wie oft Sie die Anmeldeinformationen für Microsoft Teams eingeben müssen.

In diesem Dokument erfahren Sie, wie Sie das SSO aktivieren und Bei Bedarf Ihr Authentifizierungstoken speichern.

Voraussetzungen

Die Voraussetzungen zum Aktivieren von SSO für Messaging-Erweiterungen und die Verbreitung von Links sind wie folgt:

Hinweis

Weitere Informationen zum Erstellen eines Azure-Kontos und aktualisieren Ihres App-Manifests finden Sie unter SSO-Unterstützung (Single Sign-On) für Bots.

Nachdem die Voraussetzungen erfüllt sind, können Sie SSO für Messaging-Erweiterungen und die Verbreitung von Links aktivieren.

So aktivieren Sie SSO

  1. Aktualisieren Sie Ihre OAuth-Verbindungsdetails für Bots im Azure-Portal.

  2. Laden Sie das Beispiel für Messaging-Erweiterungen herunter, und folgen Sie den Setupanweisungen des Assistenten.

    Hinweis

    Verwenden Sie Ihre Bots-OAuth-Verbindung beim Einrichten Ihrer Messaging-Erweiterungen.

  3. Aktualisieren Sie in der Datei "TeamsMessagingExtensionsSearchAuthConfigBot.cs" den Wert von "auth" in "silentAuth" im OnTeamsMessagingExtensionQueryAsync und/oder OnTeamsAppBasedLinkQueryAsync .

    Hinweis

    Wir unterstützen keine anderen Handler SSO, mit Ausnahme OnTeamsMessagingExtensionQueryAsync OnTeamsAppBasedLinkQueryAsync der Datei "TeamsMessagingExtensionsSearchAuthConfigBot.cs".

  4. Sie erhalten das Token im OnTeamsMessagingExtensionQueryAsync Handler in der Nutzlast oder im , je turnContext.Activity.Value OnTeamsAppBasedLinkQueryAsync nachdem, für welches Szenario Sie SSO aktivieren:

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

    Wenn Sie die OAuth-Verbindung verwenden, fügen Sie den folgenden Code zur Datei "TeamsMessagingExtensionsSearchAuthConfigBot.cs" hinzu, um das Token im Speicher zu aktualisieren oder hinzuzufügen:

    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;
         }
    
    

Weitere Informationen