Konfigurieren von Single Sign-On mit Microsoft Entra ID
Artikel
Copilot Studio unterstützt einmaliges Anmelden (SSO). SSO ermöglicht es Agenten auf Ihrer Website, Kunden anzumelden, wenn sie bereits auf der Seite oder App angemeldet sind, auf der Agent bereitgestellt wird.
Beispielsweise wird der Agent im Unternehmensintranet oder in der App gehostet, bei welcher 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.
Einen benutzerdefinierten Bereich für Ihren Agenten festlegen
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 Copilot Studio-Ideenforum vorschlagen.
1 Wenn Sie auch den Teams-Kanal aktiviert haben, müssen Sie die Konfigurationsanweisungen in der Dokumentation Einmaliges Anmelden mit Microsoft Entra ID für Agenten in Microsoft Teams konfigurieren 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, welche die Microsoft Entra ID-Benutzerauthentifizierung für Ihren Agenten ermöglicht
Eine Canvas-App-Registrierung, die SSO für Ihre benutzerdefinierte Webseite aktiviert
Aus Sicherheitsgründen wird davon abgeraten, dieselbe App-Registrierung sowohl für Ihren Agenten als auch für Ihre benutzerdefinierte Website zu verwenden.
Verwenden Sie die Anweisungen zur Erstellung 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.
Wählen Sie unter Bereiche das Symbol In Zwischenablage kopieren aus.
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.
Die Tokenendpunkt-URL Ihres Agenten suchen
Öffnen Sie in Copilot Studio Ihren Agenten 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 nach den 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 den folgenden Code am Anfang von aysnc function main() 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: '00001111-aaaa-2222-bbbb-3333cccc4444',
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://<token endpoint URL>"
Bearbeiten Sie den Wert userId, um ein benutzerdefiniertes Präfix einzuschließen. Zum Beispiel:
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 Agenten und fügen Sie den Validierungscode in die Agentenunterhaltung ein.
Copilot Studio sendet eine Anmeldeaufforderung, damit sich der Benutzer bei seinem konfigurierten Identitätsanbieter anmelden kann.
Der benutzerdefinierte Canvas des Agenten fängt die Anmeldeaufforderung ab und fordert ein OBO-Token (im Auftrag von) von Microsoft Entra ID an. Der Canvas sendet das Token an den Agenten.
Nach Erhalt des OBO-Tokens tauscht der Agent das OBO-Token gegen ein Zugriffstoken aus und füllt die AuthToken-Variable mit dem Wert des Zugriffstokens 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 Agenten als auch für Ihren benutzerdefinierten Canvas verwenden.
Eine App-Registrierung für den Canvas des Agenten erstellen
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 Agenten zu verwenden, dessen Canvas Sie registrieren, und „Canvas“ mitaufzunehmen, um ihn von der App-Registrierung zur Authentifizierung zu unterscheiden.
Wenn Ihr Agent beispielsweise „Contoso-Verkaufshilfe“ heißt, können Sie die App-Registrierung als „ContosoSalesCanvas“ oder etwas Ähnliches bezeichnen.
Wählen Sie unter Unterstützte Kontotypen die Option Konten in einem beliebigen Organisationsmandanten (jedes Microsoft Entra ID-Verzeichnis – mehrinstanzenfähig) und persönliche Microsoft-Konten (z. B. Skype, Xbox) aus.
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.
Wählen Sie auf dem Blatt Plattformen konfigurieren die Option Web aus.
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 Benutzende jeder Anwendung zustimmen müssen, muss mindestens eine Fachkraft mit der Rolle für die Anwendungs- oder Cloud-Anwendungsadministration die mandantenweite Einwilligung zu Ihren Anwendungsregistrierungen erteilen.
Einen benutzerdefinierten Bereich für Ihren Agenten festlegen
Definieren Sie einen benutzerdefinierten Bereich, indem Sie eine API für die Canvas-App-Registrierung in der Authentifizierungs-App-Registrierung verfügbar machen. Mit 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 Agenten hinzugefügt wurden. Wählen Sie Einwilligung des Administrators für <Mandantennamen> gewähren und dann Ja aus.
Wichtig
Um zu vermeiden, dass Benutzende jeder Anwendung zustimmen müssen, muss mindestens eine Fachkraft mit der Rolle für die Anwendungs- oder Cloud-Anwendungsadministration die mandantenweite Einwilligung zu Ihren Anwendungsregistrierungen 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 Agenten ausgewählt haben, für den Sie die Authentifizierung aktivieren möchten, indem Sie das Agentensymbol im oberen Menü auswählen und den richtigen Agenten auswählen.
Wählen Sie im Navigationsmenü unter Einstellungen die Option Sicherheit. Wählen Sie dann die Karte Authentifizierung aus.
Geben Sie den URI für den gesamten Bereich über das Blade Eine API verfügbar machen für die Registrierung der Authentifizierungs-App des Agenten 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 Inhalt des Agenten.
Konfigurieren Ihres benutzerdefinierten Canvas-HTML-Codes, um SSO zu aktivieren
Aktualisieren Sie die benutzerdefinierte Canvas-Seite, auf der sich der Agent 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 der resourceUrl und zum Austauschen des aktuellen Tokens gegen ein Token auf, das von der OAuth-Eingabeaufforderung angefordert wird.
<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 Agenten hinzu. Es erzeugt auch eine eindeutige ID als Ihre userId-Variable.
Aktualisieren Sie <COPILOT ID> mit der ID Ihres Agenten. Sie können die ID Ihres Agenten sehen, indem Sie auf die Registerkarte Kanäle für den Agenten, den Sie verwenden, gehen und Mobile App im Copilot Studio-Portal auswählen.
<script>
(async function main() {
// Add your AGENT 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') {
// The agent 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.