Endbenutzer bei Ihrem eigenen Identitätsanbieter authentifizieren authentication
Standardmäßig ist jede Aktion in Ihrer App öffentlich. Jede LLM-Plattform mit Ihrer MCP-Server-URL kann diese Aktionen aufrufen, und Ihr Handler kann den Endbenutzer nicht identifizieren.
Aktivieren Sie die Authentifizierung, wenn eine Aktion wissen muss, welcher Endbenutzer fragt - z. B. um seine Bestellungen, Berechtigungen oder Kontodetails zurückzugeben. Die LLM-Plattform meldet den Benutzer bei Ihrem Identitätsanbieter (IdP) an, sendet das daraus resultierende Zugriffstoken bei jedem Aufruf und Ihr Handler erhält die verifizierte Identität.
In diesem Handbuch: Erfahren Sie, wie Sie Ihren Identitätsanbieter verbinden und auswählen, welche Aktionen eine Anmeldung erfordern. Verwenden Sie die verifizierte Identität in Ihren Handlern, stellen Sie die App bereit und testen Sie die Anmeldung und geschützte Aktionen.
Die Einrichtung der Authentifizierung ist eine erweiterte Aufgabe. Schließen Sie Infrastruktur-Setup, Aktionen erstellen ab und stellen Sie Ihr Programm bereit.
Funktionsweise
Sie bringen Ihren eigenen Identitätsanbieter mit. Ihre bereitgestellte App ist nur ein OAuth 2.1 Ressourcen-Server - sie überprüft Token, die von Ihrem Autorisierungs-Server ausgestellt wurden. Es gibt nie Token aus und speichert Adobe nie Ihre Client-ID oder Ihr Client-Geheimnis.
┌── Your identity provider ───────────────────────────────────────────────┐
│ Authorization server — you own it │
│ Issues access tokens, holds the user directory, defines the scopes │
└─────────────────────────────────────────────────────────────────────────┘
▲ 2 user signs in, platform gets an access token
│ │
│ 1 platform discovers your │ 3 every tools/call carries
│ authorization server from │ Authorization: Bearer <token>
│ your app's metadata ▼
┌── LLM platform (ChatGPT, Claude, …) ────────────────────────────────────┐
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌── Your LLM App on Adobe I/O Runtime ────────────────────────────────────┐
│ Resource server — verifies the token's signature, issuer, audience, │
│ and expiry, then enforces the auth mode you set for each action │
│ │
│ Your handler reads the verified identity from its second argument │
└─────────────────────────────────────────────────────────────────────────┘
Konfigurieren der (pro Umgebung. Staging und Produktion enthalten unabhängige Einstellungen. Überprüfen Sie die Konfiguration mit einem Entwicklungs-IDp-Mandanten, bevor Sie die Authentifizierung für Produktion aktivieren.
Voraussetzungen
- Ein OAuth 2.1- oder OpenID Connect-Identitätsanbieter, der JWT-Zugriffstoken ausgibt, die mit einem asymmetrischen Algorithmus signiert sind. Opake Token und HMAC-signierte Token werden nicht unterstützt. Siehe Token-.
- Administratorzugriff auf diesen Identitätsanbieter, um eine API und einen Client zu registrieren.
- Die Mobile App wird mindestens einmal in der Umgebung bereitgestellt, die Sie konfigurieren. Die bereitgestellte MCP-Server-URL ist der Wert, auf den Ihre Token angewendet werden müssen.
Kopieren der Ressourcenkennung
Die „Ressourcenkennung Ihrer App ist MCP-Server-URL. Jedes Zugriffstoken, das Ihr Identitätsanbieter für die App ausgibt, muss diese URL als Zielgruppe benennen. Diese Zielgruppenbindung verhindert die Verwendung eines Tokens, das für einen anderen Service ausgestellt wurde.
- Öffnen Sie die App-Detailseite.
- Scrollen Sie zu App testen.
- Wählen Sie unter der Umgebung, die Sie konfigurieren, URL kopieren aus.
Behalten Sie im nächsten Schritt die kopierte MCP-Server-URL für die Identity Provider-Konfiguration bei. Fügen Sie die URL ein, anstatt sie erneut einzugeben. Für die Zielgruppenprüfung ist eine exakte Zeichenfolgenübereinstimmung erforderlich, einschließlich des Pfads. Ein einzelner Zeichenunterschied führt dazu, dass die Validierung jedes Tokens fehlschlägt.
Konfigurieren des Identitätsanbieters
Die Schritte variieren je nach Anbieter. Konfigurieren Sie die folgenden vier Elemente.
- Registrieren Sie Ihre App als API (Ressource). Setzen Sie die Kennung - den Wert, den der Anbieter in den
auddes Tokens eingibt - auf die kopierte MCP-Server-URL. Dieses Feld wird normalerweise von Anbietern Kennung oder Zielgruppe bezeichnet. Verwenden Sie einen eindeutigen Bezeichner für die App, keinen allgemeinen Wert wieapi, um die Verwendung von Token zu verhindern, die für einen anderen Service ausgestellt wurden. - Definieren Sie die Bereiche die Ihre Aktionen schützen, z. B.
orders:readoderprofile:read. Verwenden Sie für jede aussagekräftige Berechtigung einen Bereich, damit jede Aktion nur den Zugriff anfordert, den sie benötigt. - Unterstützung PKCE. LLM-Plattformen senden bei jeder Autorisierungsanfrage eine
code_challengemitcode_challenge_method=S256, sodass Ihr Autorisierungs-Server S256 PKCE unterstützen und"code_challenge_methods_supported": ["S256"]in seinen Metadaten anzeigen muss. - Wählen Sie aus, wie die LLM-Plattform ihren OAuth-Client identifiziert. Verwenden Sie Client-ID-Metadatendokumente (CIMD), wenn Ihr Anbieter die Anforderungen der Plattform, die dynamische Client-Registrierung (DCR) oder einen vorregistrierten OAuth-Client unterstützt. Geben Sie nur dann eine Client-ID und ein Client-Geheimnis an, wenn die von Ihnen gewählte Methode dies erfordert. Registrieren Sie den exakten Umleitungs-URI, der von der Plattform dokumentiert oder angezeigt wird, für die gehosteten Oberflächen von Claude, der
https://claude.ai/api/mcp/auth_callbackist. ChatGPT können je nach den angekündigten Funktionen des Anbieters einen stabilen oder Connector-spezifischen Callback verwenden. Kopieren Sie daher den angezeigten URI, anstatt ihn zu erraten. Siehe die aktuelle ChatGPT-Authentifizierungsdokumentation und Claude-Authentifizierungsdokumentation.
Authentifizierung aktivieren
-
Wählen Sie in der linken Navigation Einstellungen aus und öffnen Sie dann die Registerkarte Authentifizierung.
-
Wählen Sie in die Option Staging oder Produktion.
-
Aktivieren Sie Authentifizierung aktivieren.
-
Geben unter "" Folgendes ein:
- Aussteller - Die HTTPS-Aussteller-URL Ihres Identitätsanbieters, die auch der Wert ist, den sie in den
issjedes Tokens eingibt. Die Plattform benötigt diese URL und veröffentlicht den Herausgeber als Autorisierungs-Server der App für die LLM-Client-Erkennung. Jede App unterstützt einen Identitätsanbieter. - Unterstützte Bereiche - Jeder Bereich, den die Aktionen dieser App erfordern dürfen. Spiegeln Sie die Bereiche, die Sie in Ihrem Identitätsanbieter definiert haben.
- Aussteller - Die HTTPS-Aussteller-URL Ihres Identitätsanbieters, die auch der Wert ist, den sie in den
-
Erweiterte Einstellungen ist optional. Legen Sie JWKS-URI nur fest, wenn Ihre Signierschlüssel nicht an der Stelle sind, an der die Metadaten Ihres Autorisierungsservers sie anzeigen. Andernfalls erkennt die App sie automatisch.
-
Klicken Sie auf Speichern.
Informationen zu den Feldanforderungen finden Sie unter Authentifizierungseinstellungen.
Authentifizierungsmodus für jede Aktion auswählen
Wenn Sie die Authentifizierung aktivieren ändert sich jede Aktion, die derzeit auf Keine festgelegt ist, in Erforderlich. Überprüfen unter „Konfiguration pro Aktion diese Zuweisung und legen Sie den Modus fest, den jede Aktion benötigt:
Aktionen, die bereits auf Erforderlich oder Optional festgelegt sind, behalten ihren vorhandenen Modus bei.
Fügen Sie für eine Erforderlich oder Optional-Aktion die Bereiche erforderlichen hinzu. Jeder Bereich muss bereits in Unterstützte Bereiche angezeigt werden, sodass die App jede erforderliche Berechtigung für LLM-Plattformen bekannt gibt. Die Plattform blockiert das Speichern, bis Sie eine nicht übereinstimmende Größe auflösen.
Unterstützte Bereiche steuert die verfügbaren Bereiche. Wenn Sie einen Bereich aus dieser Liste entfernen, wird der Bereich sofort aus allen Aktionen entfernt, für die er erforderlich ist. Fügen Sie jeden Bereich der Liste hinzu, bevor Sie ihn einer Aktion zuweisen.
Wenn Sie Authentifizierung für alle Aktionen verlangen werden Keine Aktionen in Erforderlich geändert, aber Aktionen, die bereits auf Optional festgelegt sind, werden beibehalten. Um die Anmeldung für jede Aktion zu verlangen, ändern Sie alle verbleibenden optional Zeilen einzeln in Erforderlich. Wenn Sie das Kontrollkästchen deaktivieren, wird jede Aktion auf Keine zurückgesetzt.
Wählen abschließend Speichern“ aus. Änderungen an Authentifizierungsmodus und -umfang werden zusammen mit den Einstellungen auf Programmebene gespeichert.
ChatGPT unterstützt gemischte Authentifizierungsmodi in einer App und wendet den Modus jeder Aktion einzeln an. Öffentliche Aktionen fordern nicht zur Anmeldung auf. Bei geschützten Aktionen wird nach Bedarf eine Eingabeaufforderung angezeigt.
Claude unterstützt auch gemischte Apps durch Lazy Authentication. Wenn Bei Bedarf anmelden während der Connector-Einrichtung ausgewählt wurde, bleiben öffentliche Aktionen anonym nutzbar und die Plattform fordert zur Anmeldung auf, wenn eine Aktion Erforderlich aufgerufen wird. Eine App, deren Aktionen alle Erforderlich sind, muss vor der Verwendung angemeldet werden. Unter LLM-Plattformverhalten finden Sie den Unterschied zwischen einer erforderlichen Aktion und einem optionalen Handler, der die Anmeldung anfordert.
Änderung bereitstellen
Authentifizierungsänderungen werden bei der nächsten Bereitstellung dieser App wirksam. Die App erneut bereitstellen in der von Ihnen konfigurierten Umgebung. Siehe Bereitstellen der App.
Ihre MCP Server URL ändert sich nicht. Aktualisieren Sie die Metadaten der Verbindung und stellen Sie sicher, dass ihre Authentifizierungseinstellungen mit der neuen Konfiguration der App übereinstimmen. Eine Plattform kann es erforderlich machen, dass Sie die Verbindung neu verbinden oder neu erstellen, wenn sich die Authentifizierungsmethode ändert.
Lesen der Identität in Ihrem Handler
Eine verifizierte Identität erreicht Ihren Handler als zweites Argument, wenn der Aufrufer ein gültiges Token sendet, unabhängig vom Authentifizierungsmodus der Aktion. Eine optionale Aktion kann diese Identität verwenden, um Ergebnisse zu personalisieren, sofern verfügbar, und andernfalls ein anonymes Ergebnis zurückzugeben.
Verwenden Sie getAuthenticatedUser, um den angemeldeten Benutzer zu lesen:
const { getAuthenticatedUser } = require('@adobe/llm-apps-runtime');
module.exports = async ({ orderId }, extra) => {
const userId = getAuthenticatedUser(extra);
if (!userId) {
return { content: [{ type: 'text', text: 'Sign in to see your orders.' }] };
}
const order = await fetchOrderForUser(userId, orderId);
return {
content: [{ type: 'text', text: `Order ${order.id} is ${order.status}.` }],
structuredContent: order
};
};
Die Laufzeit überprüft das Token für Sie. Für eine Erforderlich-Aktion blockiert sie jeden Aufruf, dem ein gültiges Token mit den aufgelisteten Bereichen fehlt. Der Handler wird nur für einen autorisierten Aufrufer ausgeführt. Verwenden Sie hasScope, um das Handler-Verhalten basierend auf einer Berechtigung auszuwählen, z. B. in einer optionalen Aktion.
Um die Anmeldung während eines Gesprächs anzufordern, geben Sie extra.challengeAuth() vom Handler zurück. Der Helper ist nur für () verfügbar:
module.exports = async ({ signIn }, extra) => {
if (signIn && !extra.authInfo) {
return extra.challengeAuth({
error: 'invalid_token',
errorDescription: 'Sign in to see member pricing.'
});
}
return {
content: [{
type: 'text',
text: extra.authInfo ? await memberDeals() : await publicDeals()
}]
};
};
Verwenden Sie einen expliziten Eingabeparameter, z. B. signIn in diesem Beispiel, um zu entscheiden, wann eine Authentifizierung angefordert werden soll. Ziehen Sie diese Entscheidung nicht aus dem Wortlaut des Benutzers.
Stellen Sie error so ein, dass es der gemeldeten Bedingung entspricht. Verwenden Sie invalid_token, wenn der Aufrufer keine gültige Sitzung hat und sich anmelden muss, wie im Beispiel oben gezeigt. Verwenden Sie insufficient_scope, wenn der Aufrufer angemeldet ist, dem Token jedoch der erforderliche Bereich fehlt. Jede LLM-Plattform wählt den Prompt-Text und die Art und Weise, wie auf den Fehler-Code zu reagieren. Senden Sie den Code, der die Bedingung genau beschreibt.
Fordern Sie die Authentifizierung nur an, wenn die erforderliche Identität fehlt, wie in diesem Beispiel bei der !extra.authInfo. Die Anmeldung löst keine bedingungslose Herausforderung: Der Handler fordert die Authentifizierung bei jedem Aufruf erneut an.
extra.challengeAuth() gibt eine Tool-Ergebnisaufgabe für ChatGPT zurück. Claude benötigt stattdessen eine HTTP-Authentifizierungsproblematik, bevor der Handler ausgeführt wird. Verwenden Sie für einen Vorgang, für den die Anmeldung auf mehreren unterstützten Plattformen erforderlich ist, die Aktion Erforderlich. Halten Sie eine separate Keine-Aktion für das öffentliche Erlebnis bereit, falls erforderlich.Bewahren Sie die Identität Server-seitig auf. Übergeben Sie nur die Daten, die das Widget structuredContent benötigt. Fügen Sie in structuredContent niemals ein Zugriffs-Token ein. Siehe Anpassen eines generierten Handlers.
Den vollständigen Vertrag finden Sie unter Handler-Auth-API.
Testen der geschützten App
Ihr vorhandenes Plug-in oder Connector verwendet die aktualisierte Konfiguration nach der Bereitstellung. Um eine neue Verbindung zu erstellen, folgen Sie den Anweisungen für Ihre Plattform:
ChatGPT
Legen Sie im Dialogfeld Neues Plug die Einstellung Authentifizierung fest, um sie an die Konfiguration der App-Aktionen anzupassen:
Eine Optional-Aktion akzeptiert immer anonyme Aufrufe, sodass eine App, die eine enthält, nie vollständig gated wird. Wählen Sie Gemischt, auch wenn jede Aktion auf Optional gesetzt ist. Nur Erforderlich lehnt nicht authentifizierte Aufrufe ab.
Siehe Testen des ChatGPTPlug-ins für den Rest des Dialogfelds.
Claude
Fügen Sie den benutzerdefinierten Connector hinzu und überprüfen Sie die Authentifizierungseinstellungen. Wählen Sie für eine gemischte öffentliche/geschützte App Bei Bedarf anmelden wenn verfügbar. Um die Anmeldung vor der Verwendung des Connectors anzufordern, wählen Sie Jetzt anmelden aus. Das Dialogfeld variiert je nach Konto oder Organisation. Siehe Testen des Claude-Connectors.
Überprüfen
- Die Plattform leitet Sie zur Anmeldeseite Ihres eigenen Identitätsanbieters weiter.
- Eine geschützte Aktion gibt benutzerspezifische Daten nach der Anmeldung zurück.
- Eine geschützte Aktion fordert Sie zur Anmeldung auf, wenn Sie abgemeldet sind.
- In einer gemischten App reagiert eine Aktion mit dem Wert Keine weiterhin ohne Anmeldung. Überprüfen Sie in Claude die öffentliche Aktion mit Bei Bedarf anmelden.
- Wiederholen Sie nach der Anmeldung die geschützte Aktion und vergewissern Sie sich, dass die erwarteten Berechtigungen von der Laufzeit erzwungen werden.
Wenn die Anmeldung nicht gestartet oder ein Token abgelehnt wird, finden Sie weitere Informationen unter Fehlerbehebung.
Sicherheitsleitfaden
- Gewähren Sie den engsten Umfang, den jede Aktion benötigt. Verwenden Sie nicht bei jeder Aktion einen breiten Bereich.
- Behalten Sie Ihr Client-Geheimnis bei Ihrem Identitätsanbieter und in der Connector-Konfiguration der LLM-Plattform bei. Nie in Aktionsmetadaten, Handler-Code, Widget-JavaScript oder Quellcodeverwaltung einfügen.
- Token-Ansprüche als Eingabe von einem externen System behandeln. Validieren Sie Werte aus
authInfo.extra, bevor Sie diese Werte in einer Abfrage verwenden. - Autorisieren und authentifizieren. Ein gültiges Token beweist die Identität des Benutzers, nicht die Berechtigung, einen bestimmten Datensatz zu lesen. Überprüfen Sie den Besitz in Ihrem Handler, bevor Sie Daten zurückgeben.
- Protokollieren Sie keine Token, vollständigen Anspruchssätze oder Benutzerkennung.
- Gibt sichere Fehler zurück. Dem Benutzer keine vorgeschalteten Identity Provider-Antworten oder Stack-Traces anzeigen.
- Richten Sie "" ein und überprüfen Sie mit einem Nicht-Produktions-Identitätsanbieter-Mandanten, bevor Sie die Authentifizierung in "".
Wie geht es weiter
- Authentifizierungsreferenz - Felder, Token-Anforderungen und Plattformverhalten.
- Generierten Handler anpassen - Ruft eine geschützte Upstream-API aus einem Handler auf.
- App bereitstellen.