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.
Zustimmungsdialogfeld zum Abrufen des Zugriffstokens
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:
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
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()); } }
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.
Der Bot verwendet das Zugriffstoken im Namen des App-Benutzers, um seine Aktionen auszuführen.
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 |