Konfigurieren von Single Sign-On mit Microsoft Entra ID
Artikel
Copilot Studio unterstützt einmaliges Anmelden (SSO). SSO erlaubt Copiloten auf Ihrer Website, Kundschaft anzumelden, wenn sie bereits auf der Seite oder in der App angemeldet ist, auf der der Copilot bereitgestellt wird.
Beispielsweise wird der Copilot im Unternehmensintranet oder in der App gehostet, bei der der Benutzende bereits angemeldet ist.
Es gibt vier Hauptschritte zum Konfigurieren von SSO für Copilot Studio:
Erstellen Sie eine App-Registrierung in Microsoft Entra ID für Ihren benutzerdefinierten Canvas.
Leben Sie einen benutzerdefinierten Bereich für Ihren Copiloten fest.
Konfigurieren Sie Authentifizierung in Copilot Studio, um SSO zu aktivieren.
Konfigurieren Sie Ihren benutzerdefinierten Canvas-HTML-Code, um SSO zu aktivieren.
Die folgende Tabelle zeigt die Kanäle, die derzeit SSO unterstützen. Sie können Unterstützung für weitere Kanäle im Microsoft Copilot Studio-Ideenforum vorschlagen.
1 Wenn Sie auch den Teams-Kanal aktiviert haben, müssen Sie die Konfigurationsanweisungen unter Single Sign-On mit Microsoft Entra ID für Copiloten konfigurieren in der Microsoft Teams Dokumentation folgen befolgen. Wenn Sie die SSO-Einstellungen für Teams nicht gemäß den Anweisungen auf dieser Seite konfigurieren, schlägt die Authentifizierung Ihrer Benutzenden immer fehl, wenn sie den Teams-Kanal verwenden.
App-Registrierungen für Ihre benutzerdefinierte Website erstellen
Um SSO zu aktivieren, müssen Sie zwei separate App-Registrierungen erstellen:
Eine Authentifizierungs-App-Registrierung, die die Microsoft Entra ID-Benutzerauthentifizierung für Ihren Copiloten ermöglicht
Eine Canvas-App-Registrierung, die SSO für Ihre benutzerdefinierte Webseite aktiviert
Aus Sicherheitsgründen sollten Sie dieselbe App-Registrierung nicht sowohl für Ihren Copiloten als auch für Ihre benutzerdefinierte Website zu verwenden.
Folgen die Anweisungen zum erneuten Erstellen einer Authentifizierungs-App-Registrierung, um eine zweite App-Registrierung zu erstellen, die als Ihre Canvas-App-Registrierung dient.
Fügen Sie die Canvas-App-Registrierungs-ID der Authentifizierungs-App-Registrierung hinzu.
Token-Austausch-URL hinzufügen
Um die Microsoft Entra ID-Authentifizierungseinstellungen in Copilot Studio zu aktualisieren, müssen Sie die Token-Austausch-URL hinzufügen, damit Ihre App und Copilot Studio Informationen austauschen dürfen.
Gehen Sie im Azure-Portal auf dem Registrierungsblatt Ihrer Authentifizierungs-App zu API verfügbar machen.
Klicken Sie unter Bereiche auf das Symbol In die Zwischenablage kopieren .
In Copilot Studio wählen Sie im Navigationsmenü unter Einstellungen die Option Sicherheit und wählen Sie dann die Kachel Authentifizierung.
Für den Token-Austausch-URL (erforderlich für SSO) fügen Sie den Bereich ein, den Sie zuvor kopiert haben.
Wählen Sie Speichern.
Ihre Canvas-App-Registrierung konfigurieren
Nachdem Sie Ihre Canvas-App-Registrierung erstellt haben, wechseln Sie zu Authentifizierung, und wählen Sie dann Eine Plattform hinzufügen aus.
Wählen Sie unter PlattformkonfigurationenEine Plattform hinzufügen und dann Web aus.
Geben Sie unter Umleitungs-URIs die URL für Ihre Webseite ein, z. B. http://contoso.com/index.html.
Aktivieren Sie im Abschnitt Implizite Genehmigung und Hybridflows sowohl Zugriffstoken (verwendet für implizite Flows) als auch ID-Token (für implizite und Hybrid-Flows).
Wählen Sie Konfigurieren aus.
Suchen Sie die Tokenendpunkt-URL Ihres Copiloten
Öffnen Sie in Copilot Studio Ihren Copiloten und wählen Sie dann Kanäle aus.
Wählen Sie mobile App.
Wählen Sie unter Token-Endpunkt die Option Kopieren aus.
SSO auf Ihrer Webseite konfigurieren
Vewrenden Sie den im Copilot Studio-GitHub-Repository bereitgestellten Code, um eine Webseite für die Umleitungs-URL zu erstellen. Kopieren Sie den Code aus dem GitHub-Repository und ändern Sie ihn anhand der folgenden Anweisungen.
Anmerkung
Der Code im GitHub-Repository erfordert, dass der Benutzende eine Anmeldeschaltfläche auswählt oder sich von einer anderen Website aus anmeldet. Um die automatische Anmeldung zu aktivieren, fügen Sie am Anfang von aysnc function main() den folgenden Code hinzu:
(async function main() {
if (clientApplication.getAccount() == null) {
await clientApplication.loginPopup(requestObj).then(onSignin).catch(function (error) {console.log(error) });
}
// Add your BOT ID below
var theURL =
Wechseln Sie zur Seite Übersicht im Azure-Portal, und kopieren Sie die Anwendungs-ID (Client) und die Verzeichnis-ID (Mandant) aus Ihrer Canvas-App-Registrierung.
So konfigurieren Sie die Microsoft Authentication Library (MSAL):
Ordnen Sie clientId Ihrer Anwendungs-(Client-)ID zu.
Ordnen Sie authority zu https://login.microsoftonline.com/ zu und fügen Sie am Ende Ihre Verzeichnis-(Mandanten)-ID hinzu.
Zum Beispiel:
var clientApplication;
(function (){
var msalConfig = {
auth: {
clientId: '692e92c7-xxxx-4060-76d3-b381798f4d9c',
authority: 'https://login.microsoftonline.com/7ef988bf-xxxx-51af-01ab-2d7fd011db47'
},
Legen Sie die theURL-Variable auf die URL des Token-Endpunkts fest, die Sie zuvor kopiert haben. Zum Beispiel:
(async function main() {
var theURL = "https://1c0.0.environment.api.powerplatform.com/powervirtualagents/bots/5a099fd/directline/token?api-version=2022-03-01-preview"
Bearbeiten Sie den Wert userId, um ein benutzerdefiniertes Präfix einzuschließen. Zum Beispiel:
Testen Sie Ihren Copiloten mithilfe Ihrer Webseite
Öffnen Sie Ihre Webseite in Ihrem Browser.
Wählen Sie Anmeldung aus.
Notiz
Wenn Ihr Browser Popups blockiert oder Sie ein Inkognito- oder privates Browserfenster verwenden, werden Sie aufgefordert, sich anzumelden. Andernfalls wird die Anmeldung mit einem Validierungscode abgeschlossen.
Es wird eine neue Browserregisterkarte geöffnet.
Wechseln Sie zur neuen Registerkarte, und kopieren Sie den Validierungscode.
Gehen Sie zurück zur Registerkarte mit Ihrem Copiloten und fügen Sie den Validierungscode in die Copilotenunterhaltung ein.
Copilot Studio sendet eine Anmeldeaufforderung, damit sich der Benutzer bei seinem konfigurierten Identitätsanbieter anmelden kann.
Der benutzerdefinierte Canvas des Copiloten fängt die Anmeldeaufforderung ab und fordert ein On-Behalf-of-(OBO-)Token von Microsoft Entra ID an. Der Canvas sendet das Token an den Copiloten.
Nach Erhalt des OBO-Tokens tauscht der Copilot das OBO-Token gegen ein Zugriffstoken aus und füllt die AuthToken-Variable mit dem Wert vom Zugriffstoken aus. Zu diesem Zeitpunkt wird auch eine IsLoggedIn-Variable festgelegt.
Erstellen Sie eine App-Registrierung in Microsoft Entra ID für Ihren benutzerdefinierten Canvas
Um SSO zu aktivieren, benötigen Sie zwei separate App-Registrierungen:
Eine für Ihren benutzerdefinierten Canvas, um SSO zu aktivieren.
Wichtig
Sie können dieselbe App-Registrierung nicht sowohl für die Benutzerauthentifizierung Ihres Copiloten als auch für Ihren benutzerdefinierten Canvas verwenden.
Erstellen einer App-Registrierung für den Canvas des Copiloten
Gehen Sie zu App-Registrierungen, entweder durch Auswahl des Symbols oder durch Suchen in der oberen Suchleiste.
Wählen Sie Neue Registrierung aus.
Geben Sie einen Namen für die Registrierung ein. Es kann hilfreich sein, den Namen des Copiloten zu verwenden, dessen Canvas Sie registrieren, und „Canvas“ einzuschließen, um ihn von der App-Registrierung zur Authentifizierung zu unterscheiden.
Wenn Ihr Copilot beispielsweise „Contoso sales help“ heißt, können Sie die App-Registrierung als „ContosoSalesCanvas“ oder Ähnliches bezeichnen.
Unter Unterstützte Kontotypen, Auswählen Konten in jedem Organisationsmandanten (Jedes Microsoft Entra ID-Verzeichnis – Multitenant) und persönliche Microsoft-Konten (z. B. Skype, Xbox).
Lassen Sie den Abschnitt Umleitungs-URI leer für den Moment, da Sie diese Informationen in den nächsten Schritten eingeben werden. Wählen Sie Registrieren aus.
Nachdem die Registrierung abgeschlossen ist, wird die Seite Überblick geöffnet. Gehen Sie zu Manifest. Bestätigen Sie, dass accessTokenAcceptedVersion auf 2 festgelegt ist. Ist das nicht der Fall, ändern Sie es auf 2 und wählen Sie dann Speichern.
Hinzufügen der Umleitungs-URL
Gehen Sie bei geöffneter Registrierung zu Authentifizierung und wählen Sie dann Eine Plattform hinzufügen.
Klicken Sie im Fenster Plattformen konfigurieren auf Auswählen Web.
Fügen Sie unter URIs weiterleiten die vollständige URL der Seite hinzu, auf der Ihr Chat-Canvas gehostet wird. Aktivieren Sie unter dem Abschnitt Implizite Genehmigung die Kontrollkästchen für ID-Token und Zugriffstoken.
Wählen Sie Konfigurieren aus, um Ihre Änderungen zu bestätigen.
Gehen Sie zu API-Berechtigungen. Wählen Sie Einwilligung des Administrators für <Mandantennamen> gewähren und dann Ja aus.
Wichtig
Um zu vermeiden, dass Benutzer jeder Anwendung zustimmen müssen, muss ein globaler Administrator, ein Anwendungsadministrator oder ein Cloudanwendungsadministrator mandantenweite Zustimmung zu Ihren App-Registrierungen erteilen.
Einen benutzerdefinierten Bereich für Ihren Copiloten festlegen
Definieren Sie einen benutzerdefinierten Bereich, indem Sie eine API für die Canvas-App-Registrierung in der Authentifizierungs-App-Registrierung verfügbar machen. Mithilfe von Bereichen können Sie Benutzer- und Administratorrollen sowie Zugriffsrechte festlegen.
Dieser Schritt erstellt eine Vertrauensbeziehung zwischen der Authentifizierungs-App-Registrierung für die Authentifizierung und der App-Registrierung für Ihren benutzerdefinierten Canvas.
Gehen Sie zu API-Berechtigungen und stellen Sie sicher, dass die richtigen Berechtigungen für Ihren Copiloten hinzugefügt wurden. Wählen Sie Einwilligung des Administrators für <Mandantennamen> gewähren und dann Ja aus.
Wichtig
Um zu vermeiden, dass Benutzer jeder Anwendung zustimmen müssen, muss ein globaler Administrator, ein Anwendungsadministrator oder ein Cloudanwendungsadministrator mandantenweite Zustimmung zu Ihren App-Registrierungen erteilen.
Gehen Sie zu Eine API verfügbar machen und wählen Sie Einen Bereich hinzufügen aus.
Geben Sie einen Namen für den Umfang ein, zusammen mit den Anzeigeinformationen, die den Benutzern angezeigt werden sollen, wenn sie auf den SSO-Bildschirm kommen. Wählen Sie Umfang hinzufügen aus.
Wählen Sie Eine Client-Anwendung hinzufügen aus.
Geben Sie die Anwendungs-ID (Client-ID) von der Seite Überblick für die Canvas-App-Registrierung im Feld Client-ID ein. Aktivieren Sie das Kontrollkästchen für den aufgelisteten Bereich, den Sie erstellt haben.
Wählen Sie Anwendung hinzufügen aus.
Konfigurieren der Authentifizierung in Copilot Studio, um SSO zu aktivieren
Die Token-Austausch-URL auf der Copilot Studio-Authentifizierungskonfigurationsseite wird verwendet, um das OBO-Token über das Bot Framework gegen das angeforderte Zugriffstoken auszutauschen.
Copilot Studio ruft Microsoft Entra ID auf, um den eigentlichen Austausch durchzuführen.
Melden Sie sich bei Copilot Studio an.
Bestätigen Sie, dass Sie den Copiloten ausgewählt haben, für den Sie die Authentifizierung aktivieren möchten, indem Sie das Copilot-Symbol im oberen Menü und dann den richtigen Copiloten auswählen.
Wählen Sie im Navigationsmenü unter Einstellungen die Option Sicherheit. Wählen Sie dann die Karte Authentifizierung aus.
Geben Sie die URI für den gesamten Bereich über das Blade Eine API bereitstellen für die Registrierung der Authentifizierungs-App des Copiloten im Feld Token-Austausch-URL ein. Die URI hat das Format api://1234-4567/scope.name.
Wählen Sie Speichern aus und veröffentlichen Sie dann den Copilot-Inhalt.
Konfigurieren Ihres benutzerdefinierten Canvas-HTML-Codes, um SSO zu aktivieren
Aktualisieren Sie die benutzerdefinierte Canvas-Seite, auf der sich der Copilot befindet, um die Anmeldekartenanforderung abzufangen und das OBO-Token auszutauschen.
Konfigurieren Sie die Microsoft Authentication Library (MSAL), indem Sie den folgenden Code in ein <script>-Tag im <head>-Abschnitt einfügen.
Aktualisieren Sie clientId mit dem Anwendungs-ID (Client-ID) für die Canvas-App-Registrierung. Ersetzen Sie <Directory ID> mit der Verzeichnis-ID (Mandanten-ID). Sie erhalten diese IDs von der Seite Überblick für die Canvas-App-Registrierung.
<head>
<script>
var clientApplication;
(function () {
var msalConfig = {
auth: {
clientId: '<Client ID [CanvasClientId]>',
authority: 'https://login.microsoftonline.com/<Directory ID>'
},
cache: {
cacheLocation: 'localStorage',
storeAuthStateInCookie: false
}
};
if (!clientApplication) {
clientApplication = new Msal.UserAgentApplication(msalConfig);
}
} ());
</script>
</head>
Fügen Sie folgendes <script> in den <body>-Abschnitt ein. Dieses Skript ruft eine Methode zum Abrufen des resourceUrl aktuellen Tokens auf und tauscht ihn gegen ein von der OAuth Eingabeaufforderung angefordertes Token aus.
<script>
function getOAuthCardResourceUri(activity) {
if (activity &&
activity.attachments &&
activity.attachments[0] &&
activity.attachments[0].contentType === 'application/vnd.microsoft.card.oauth' &&
activity.attachments[0].content.tokenExchangeResource) {
// asking for token exchange with Microsoft Entra ID
return activity.attachments[0].content.tokenExchangeResource.uri;
}
}
function exchangeTokenAsync(resourceUri) {
let user = clientApplication.getAccount();
if (user) {
let requestObj = {
scopes: [resourceUri]
};
return clientApplication.acquireTokenSilent(requestObj)
.then(function (tokenResponse) {
return tokenResponse.accessToken;
})
.catch(function (error) {
console.log(error);
});
}
else {
return Promise.resolve(null);
}
}
</script>
Fügen Sie folgendes <script> in den <body>-Abschnitt ein. Innerhalb der main Methode fügt dieser Code eine Bedingung zu Ihrem store mit der eindeutigen Kennung Ihres Copiloten hinzu. Es erzeugt auch eine eindeutige ID als Ihre userId-Variable.
Aktualisieren Sie <COPILOT ID> mit der ID Ihres Copiloten. Sie können die ID Ihres Copiloten sehen, indem Sie auf die Registerkarte Kanäle für den Copiloten, den Sie verwenden, gehen und Mobile App im Copilot Studio-Portal auswählen.
<script>
(async function main() {
// Add your COPILOT ID below
var BOT_ID = "<BOT ID>";
var theURL = "https://powerva.microsoft.com/api/botmanagement/v1/directline/directlinetoken?botId=" + BOT_ID;
const {
token
} = await fetchJSON(theURL);
var directline = await fetchJSON(regionalChannelSettingsURL).then(res=> res.channelUrlsById.directline);
const directLine = window.WebChat.createDirectLine({
domain: `${directline}v3/directline`,
token
});
var userID = clientApplication.account?.accountIdentifier != null ?
("Your-customized-prefix-max-20-characters" + clientApplication.account.accountIdentifier).substr(0, 64) :
(Math.random().toString() + Date.now().toString()).substr(0, 64); // Make sure this will not exceed 64 characters
const store = WebChat.createStore({}, ({
dispatch
}) => next => action => {
const {
type
} = action;
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'startConversation',
type: 'event',
value: {
text: "hello"
}
}
});
return next(action);
}
if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
const activity = action.payload.activity;
let resourceUri;
if (activity.from && activity.from.role === 'bot' &&
(resourceUri = getOAuthCardResourceUri(activity))) {
exchangeTokenAsync(resourceUri).then(function(token) {
if (token) {
directLine.postActivity({
type: 'invoke',
name: 'signin/tokenExchange',
value: {
id: activity.attachments[0].content.tokenExchangeResource.id,
connectionName: activity.attachments[0].content.connectionName,
token,
},
"from": {
id: userID,
name: clientApplication.account.name,
role: "user"
}
}).subscribe(
id => {
if (id === 'retry') {
// copilot was not able to handle the invoke, so display the oauthCard
return next(action);
}
// else: tokenexchange successful and we do not display the oauthCard
},
error => {
// an error occurred to display the oauthCard
return next(action);
}
);
return;
} else
return next(action);
});
} else
return next(action);
} else
return next(action);
});
const styleOptions = {
// Add styleOptions to customize Web Chat canvas
hideUploadButton: true
};
window.WebChat.renderWebChat({
directLine: directLine,
store,
userID: userID,
styleOptions
},
document.getElementById('webchat')
);
})().catch(err => console.error("An error occurred: " + err));
</script>
Vollständiger Beispielcode
Um weitere Informationen zu erhalten, finden Sie den vollständigen Beispielcode mit den bereits in unserem GitHub-Repository enthaltenen MSAL- und Store-Bedingungsskripten.