Hinzufügen der Drittanbieterauthentifizierung zu Ihrer Nachrichtenerweiterung
Wichtig
Die Codebeispiele in diesem Abschnitt basieren auf Version 4.6 und höheren Versionen des Bot Framework SDK. Wenn Sie nach Dokumentation zu früheren Versionen suchen, lesen Sie den Abschnitt Nachrichtenerweiterungen – v3 SDK im Ordner Ressourcen der Dokumentation.
Hinweis
Nachdem Sie die Authentifizierung zur Nachrichtenerweiterung hinzugefügt haben, müssen Sie dem Abschnitt "validDomains" im Manifest "token.botframework.com" hinzufügen.
Identifizieren des Benutzers
Jede Anforderung an Ihre Dienste umfasst die Benutzer-ID, den Anzeigenamen des Benutzers und die Microsoft Entra-Objekt-ID.
"from": {
"id": "29:1C7dbRrC_5yzN1RGtZIrcWT0xz88KPGP9sxdpVpV8sODlgPHeQE9RqQ02hnpuKzy6zZ-AaZx6swUOMj_Dsdse3TQ4sIaeebbFBF-VgjJy_nY",
"name": "Larry Jin",
"aadObjectId": "cd723fa0-0591-416a-9290-e93ecf3a9b92"
},
Die Werte id
und aadObjectId
werden für den authentifizierten Teams-Benutzer garantiert. Sie werden als Schlüssel verwendet, um die Anmeldeinformationen oder einen zwischengespeicherten Status in Ihrem Dienst nachzuschlagen. Darüber hinaus enthält jede Anforderung die Microsoft Entra-Mandanten-ID, die verwendet wird, um die Organisation des Benutzers zu identifizieren. Falls zutreffend, enthält die Anforderung auch die Team-ID und die Kanal-ID, von der die Anforderung stammt.
Authentifizierung
Wenn Ihr Dienst eine Benutzerauthentifizierung erfordert, müssen sich die Benutzer anmelden, bevor sie die Nachrichtenerweiterung verwenden. Die Authentifizierungsschritte ähneln denen eines Bots oder einer Registerkarte. Die Sequenz sieht wie folgt aus:
- Der Benutzer stellt eine Abfrage, oder die Standardabfrage wird automatisch an Ihren Dienst gesendet.
- Ihr Dienst überprüft, ob der Benutzer authentifiziert ist, indem er die Teams-Benutzer-ID untersucht.
- Wenn der Benutzer nicht authentifiziert ist, senden Sie eine
auth
-Antwort mit einer vorgeschlagenenopenUrl
- Aktion zurück, einschließlich der Authentifizierungs-URL. - Der Microsoft Teams-Client startet ein Dialogfeld, in dem Ihre Webseite mithilfe der angegebenen Authentifizierungs-URL gehostet wird.
- Nachdem sich der Benutzer angemeldet hat, sollten Sie Ihr Fenster schließen und einen Authentifizierungscode an den Teams-Client senden.
- Der Teams-Client stellt dann die Abfrage an Ihren Dienst erneut, einschließlich des in Schritt 5 übergebenen Authentifizierungscodes.
Ihr Dienst sollte überprüfen, ob der in Schritt 6 empfangene Authentifizierungscode mit Schritt 5 übereinstimmt. Die Schritte stellen sicher, dass ein böswilliger Benutzer nicht versucht, den Anmeldeflow zu spoofen oder zu kompromittieren. Der Flow "schließt die Schleife", um die sichere Authentifizierungssequenz abzuschließen.
Antworten mit einer Anmeldeaktion
Um einen nicht authentifizierten Benutzer zur Anmeldung aufzufordern, antworten Sie mit einer vorgeschlagenen Aktion vom Typ openUrl
, die die Authentifizierungs-URL enthält.
Antwortbeispiel für eine Anmeldeaktion
{
"composeExtension":{
"type":"auth",
"suggestedActions":{
"actions":[
{
"type": "openUrl",
"value": "https://example.com/auth",
"title": "Sign in to this app"
}
]
}
}
}
Hinweis
- Damit die Anmeldeerfahrung in einem Teams-Popupfenster gehostet werden kann, muss sich der Domänenteil der URL in der Liste der gültigen Domänen Ihrer App befinden. Weitere Informationen finden Sie unter validDomains im Manifestschema.
- Die Größe des Authentifizierungs-Popupfensters kann durch Einschließen von Abfragezeichenfolgenparametern der Breite und Höhe
Value = $"{_siteUrl}/searchSettings.html?height=600&width=600"
definiert werden.
Starten des Anmeldeflusses
Ihre Anmeldeerfahrung muss reaktionsfähig sein und in ein Popupfenster passen. Es sollte in die JavaScript-Clientbibliothek von Microsoft Teams integriert werden, die nachrichtenübergaben verwendet.
Wie bei anderen eingebetteten Erfahrungen, die innerhalb von Microsoft Teams ausgeführt werden, muss Ihr Code im Fenster zuerst app.initialize()
aufrufen. Wenn Ihr Code einen OAuth-Fluss ausführt, können Sie die Teams-Benutzer-ID an Ihr Fenster übergeben, das sie dann an die OAuth-Anmelde-URL übergibt.
Abschließen des Anmeldeflusses
Wenn die Anmeldeanforderung abgeschlossen ist und zurück zu Ihrer Seite leitet, müssen die folgenden Schritte ausgeführt werden:
- Generieren Sie einen Sicherheitscode, eine Zufallszahl. Sie müssen diesen Code in Ihrem Dienst mit den Anmeldeinformationen zwischenspeichern, die über den Anmeldeflow abgerufen werden, z. B. OAuth 2.0-Token.
- Rufen Sie
authentication.notifySuccess
auf, und übergeben Sie den Sicherheitscode.
An diesem Punkt wird das Fenster geschlossen, und die Kontrolle wird an den Teams-Client übergeben. Der Client stellt nun die ursprüngliche Benutzerabfrage zusammen mit dem Sicherheitscode in der Eigenschaft state
erneut aus. Ihr Code kann den Sicherheitscode verwenden, um die zuvor gespeicherten Anmeldeinformationen nachzuschlagen, um die Authentifizierungssequenz abzuschließen und dann die Benutzeranforderung abzuschließen.
Beispiel für neu ausgestellte Anforderung
{
"name": "composeExtension/query",
"value": {
"commandId": "insertWiki",
"parameters": [{
"name": "searchKeyword",
"value": "lakers"
}],
"state": "12345",
"queryOptions": {
"skip": 0,
"count": 25
}
},
"type": "invoke",
"timestamp": "2017-04-26T05:18:25.629Z",
"localTimestamp": "2017-04-25T22:18:25.629-07:00",
"entities": [{
"locale": "en-US",
"country": "US",
"platform": "Web",
"type": "clientInfo"
}],
"text": "",
"attachments": [],
"address": {
"id": "f:7638210432489287768",
"channelId": "msteams",
"user": {
"id": "29:1A5TJWHkbOwSyu_L9Ktk9QFI1d_kBOEPeNEeO1INscpKHzHTvWfiau5AX_6y3SuiOby-r73dzHJ17HipUWqGPgw",
"aadObjectId": "fc8ca1c0-d043-4af6-b09f-141536207403"
},
"conversation": {
"id": "19:7705841b240044b297123ad7f9c99217@thread.skype"
},
"bot": {
"id": "28:c073afa8-7e77-4f92-b3e7-aa589e952a3e",
"name": "maotestbot2"
},
"serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
"useAuth": true
},
"source": "msteams"
}
Codebeispiel
Beispielname | Beschreibung | .NET | Node.js | Manifest |
---|---|---|---|---|
Nachrichtenerweiterungen – Authentifizierung und Konfiguration | Eine Nachrichtenerweiterung, die über eine Konfigurationsseite verfügt, Suchanforderungen akzeptiert und Ergebnisse zurückgibt, nachdem sich der Benutzer angemeldet hat. | View | View | Anzeigen |
Siehe auch
Aktivieren des einmaligen Anmeldens für Ihren Bot und Ihre Nachrichtenerweiterungs-App
Platform Docs