Freigeben über


Hinzufügen von Code zum Aktivieren des einmaligen Anmeldens für adaptive Karten universal actions

Die Authentifizierungsschritte für einmaliges Anmelden (Single Sign-On, SSO) ähneln denen eines Bots in Teams. Im Folgenden werden die Schritte zum Erreichen des einmaligen Anmeldens in Adaptive Cards Universal Action beschrieben.

Hinweis

Um den SSO-Flow zu implementieren, muss im App-Manifest ein 1:1-Chat für Ihren Bot deklariert sein. Wenn ein App-Benutzer den SSO-Flow über das Adaptive Card-Protokoll Action.Execute aufruft, wird eine Eingabeaufforderung angezeigt, um dem App-Benutzer zu ermöglichen, die App in einem persönlichen Bereich zu installieren, sofern er sie nicht installiert hat.

Hinzufügen von Code zum Verarbeiten eines Zugriffstokens

Stellen Sie sicher, dass Sie Ihren Bot in Microsoft Entra ID zum Abrufen des Zugriffstokens konfiguriert haben. Sie können den Code aktualisieren, um das Zugriffstoken für universelle Aktionen für adaptive Karten im Bot zu behandeln.

Wenn ein zwischengespeichertes Token vorhanden ist, verwendet der Bot dasselbe Token. Wenn kein Token verfügbar ist, sendet die adaptive Karte eine Aufrufantwort an den Botdienst, der eine OAuth-Karte mit den folgenden Werten sendet, die einen tokenExchangeResource enthält, um einen SSO-Vorgang festzulegen:

{
"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>"
      }
   ]
}
}

Der Botdienst übermittelt die Aufrufantwort an den Teams-Client, der den tokenExchangeResource Wert und das Teams-Clienttoken verwendet, um ein Im-Auftrag-of-Token oder austauschbares Token von Microsoft Entra ID abzurufen.

Das einmalige Anmelden schlägt fehl, wenn der Teams-Client den tokenExchangeResource Wert aus irgendeinem Grund ignoriert, einschließlich ungültiger Werte, Fehler beim Abrufen austauschbarer Token, oder wenn Microsoft Entra ID den Wert nicht unterstützt. Anschließend löst der Teams-Client den nominellen Anmelde- oder OAuth-Fluss aus. Es wird empfohlen, in der Antwort eine Anmelde-URL anzugeben, damit der OAuth-Fluss funktioniert.

Wenn der App-Benutzer zum ersten Mal eine adaptive Karte verwendet, muss er der App zustimmen, seine Identität zu verwenden. Das folgende Dialogfeld wird angezeigt:

Screenshot: Zustimmungsdialogfeld

Wenn der App-Benutzer Anzeigen und akzeptieren auswählt, wird die vorhandene Microsoft Entra Berechtigungszustimmungsansicht angezeigt, um alle Berechtigungen anzuzeigen. Der App-Benutzer kann den Authentifizierungsablauf fortsetzen.

Hinzufügen von Code zum Empfangen des Tokens

  1. Der Teams-Client sendet das Original adaptiveCard/action wie folgt erneut an den Bot zusammen mit dem Token:

    {
    "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..."
    }
    }
    }
    

    Der folgende Codeausschnitt zeigt, wie Sie eine Aufrufaktivität im Botdienst empfangen:

            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. Der Teams-Client sendet eine Aufrufanforderung an den Bot. Der Bot erhält die Zustimmung der App-Benutzer und verwendet ihre Identität, um den Tokenaustauschprozess mit dem Bot Framework-Tokendienst und Microsoft Entra ID zu unterstützen. Der Bot Framework-Tokendienst übermittelt den App-Benutzern das Zugriffstoken an den Bot.

    • Der Botdienst ignoriert das Zugriffstoken, wenn der Wert falsch ist.

    • Botdienst, bei dem beim Tokenaustausch ein Fehler auftritt, muss mit einem Fehler oder einer zweiten Anmeldeanforderung reagieren, die keine SSO-Informationen enthält. Wenn der Botdienst mit einem Fehler antwortet, muss der Fehler wie folgt sein:

       {
        "statusCode" = 412,
        "type" = "application/vnd.microsoft.error.preconditionFailed",
        "value" = {
          "code" = "412",
          "message" = "authentication token expired"    }
          }
      
    • Wenn SSO fehlschlägt, zeigt der Teams-Client eine Anmeldeschaltfläche in der Karte Fußzeile an, um einen nominellen Anmeldeflow zu initiieren.

  3. Der Bot verwendet das Zugriffstoken im Namen des App-Benutzers, um seine Aktionen auszuführen.

  4. Der Bot gibt eine Nicht-Fehlerantwort an den Teams-Client zurück, indem er entweder eine Karte oder eine Nachricht verwendet.

Hinweis

Informationen zum Behandeln des Zugriffstokens für den Fall, dass sich der App-Benutzer abmeldet, finden Sie unter Behandeln der Abmeldung von App-Benutzern.

Codebeispiel

Beispielname Beschreibung .NET Node.js Manifest
SSO für Ihre adaptiven Karten Universal Actions In diesem Beispielcode wird veranschaulicht, wie Sie die SSO-Authentifizierung für Ihre universellen Aktionen für adaptive Karten im Bot aktivieren. View View Anzeigen

Siehe auch