Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird gezeigt, wie Sie das Microsoft Entra ID Auth SDK (Sidecar) in Ihrer lokalen Umgebung mithilfe von Docker Compose ausführen. Sie starten einen Stapel mit vier Containern – Chat-Agent, Sidecar, downstream Wetter-API und ein lokales großsprachliches Modell (LLM) wie (Ollama). Anschließend senden Sie eine Abfrage über die Chat-UI und beobachten den vollständigen Tokenfluss von Agent zu API. Bevor Sie beginnen, überprüfen Sie die Voraussetzungen für erforderliche Tools, Microsoft Entra Mandantenobjekte und die Einrichtung der lokalen Umgebung.
Im Beispiel werden zwei Ausführungsmodi und zwei Identitätsflüsse veranschaulicht:
| Autonom (nur App) | OBO (im Namen des Benutzers) | |
|---|---|---|
| Direct (kein LLM) | Der Agent ruft ein Token ab und ruft die Wetter-API direkt auf. | Identisch, aber das Sidecar tauscht das Token des angemeldeten Benutzers aus. |
| Ollama + LangChain | Der LangGraph ReAct-Agent entscheidet, wann das get_weather Tool aufgerufen werden soll. |
Dasselbe, aber der Agent gibt das Token des Benutzers weiter. |
Voraussetzungen
Dieses Beispiel funktioniert unter macOS, Linux und Windows 10/11.
| Anforderung | macOS | Linux | Windows |
|---|---|---|---|
| Docker | Docker Desktop | Docker-Engine + Compose v2 | Docker Desktop (WSL 2-Back-End empfohlen) |
| PowerShell 7+ | brew install --cask powershell |
Installieren von PowerShell unter Linux | Eingebaut (oder PowerShell 7+ installieren) |
| Azure CLI | brew install azure-cli |
Installieren Sie den Azure CLI | winget install -e Microsoft.AzureCLI |
Sie benötigen außerdem einen Microsoft Entra-Mandanten mit diesen Objekten:
- Ein Agentenidentitätsmodul mit einem Client-Geheimnis. Notieren Sie die Werte für
BLUEPRINT_APP_IDundBLUEPRINT_CLIENT_SECRET. - Eine agent-Identität, die aus diesem Blueprint erstellt wurde. Zeichnen Sie
AGENT_CLIENT_IDauf. - (nur OBO Flow) Eine SPA App Registrierung. Zeichnen Sie
CLIENT_SPA_APP_IDauf.
Zum Erstellen dieser Objekte folgen Sie dem PowerShell-Workflow im Microsoft Entra-Agent-ID-Beispiel-Repository. Der Workflow erstellt die Blueprint-App, die Agentidentität und optional die SPA-App für die Anmeldung bei OBO.
Ollama ist keine Voraussetzung auf Ihrem Host - es wird innerhalb des Compose Stacks ausgeführt und qwen2.5:1.5bzieht automatisch.
Klonen des Beispiel-Repositorys
Führen Sie die folgenden Befehle aus, um das Beispielprojekt herunterzuladen und in das Sidecar-Verzeichnis zu wechseln, das den Docker Compose-Konfigurations- und Agent-Quellcode für diese exemplarische Vorgehensweise enthält:
git clone https://github.com/microsoft/entra-agentid-samples.git
cd entra-agentid-samples/sidecar/dev
Lokale Entwicklungsarchitektur von Sidecar
Der Stack umfasst vier Container in einem internen Docker-Netzwerk: llm-agent-dev (Flask-Chat-UI, offengelegt über Port 3003), agent-id-sidecar-dev (das Microsoft Entra ID Auth SDK-Sidecar), weather-api-dev (nachgelagerte API, die Agent-Tokens validiert) und ollama-dev (das lokale LLM). Nur die Chat-UI wird Ihrem Host offengelegt. Die Sidecar- und Wetter-API sind nur innerhalb des Docker-Netzwerks erreichbar.
Alle vier Container werden in einem freigegebenen Docker-Brücke-Netzwerk (agent-network-dev) ausgeführt. Nur die Chat-UI (Port 3003) wird Für Ihren Host verfügbar gemacht. Die Sidecar- und Wetter-API haben keinen Hostport, wodurch der Tokenendpunkt innerhalb einer Vertrauensgrenze bleibt.
Der Anforderungspfad funktioniert wie folgt:
- Sie öffnen
http://localhost:3003in Ihrem Browser und senden eine Abfrage. - Der Agent (
llm-agent-dev) empfängt die Abfrage und entscheidet, dasget_weatherTool aufzurufen. - Das Tool fragt das Sidecar nach einem Autorisierungsheader bei
GET /AuthorizationHeader...?AgentIdentity={agentId}. - Der Sidecar (
agent-id-sidecar-dev) führt einen OAuth 2.0-Austausch mit Microsoft Entra ID durch und empfängt ein Token (TR). - Das Sidecar gibt den
Authorization: Bearer TRHeader an den Agent zurück. - Der Agent ruft die Wetter-API (
weather-api-dev) mit diesem Header auf. - Die Wetter-API validiert TR (JSON Web Key Set (JWKS), RS256-Signaturalgorithmus, Aussteller, Ablaufzeit, Zielgruppe) und gibt Wetterdaten zurück.
Der Agent kontaktiert Microsoft Entra ID nie direkt und bekommt keine Anmeldeinformationen zu sehen. Er fragt das Sidecar nach einer Authorization Kopfzeile, empfängt ein Bearer Token und übergibt dieses Token an die Wetter-API. Nur das Sidecar kommuniziert mit login.microsoftonline.com.
Verständnis des Tokenflusses
Der autonome Fluss verwendet zwei Token: T1 (Blueprint-App-Token aus den Anmeldeinformationen des Clients) und TR (Agent-Token für die Downstream-API). Der OBO-Fluss fügt ein Drittes hinzu: Tc (Benutzerzugriffstoken von der MSAL.js-Browser-Anmeldung). Das Sidecar übernimmt den gesamten Token-Erwerb und die Zwischenspeicherung, sodass Ihr Agent-Code Anmeldeinformationen nie direkt verwaltet.
Verstehen Sie den autonomen Token-Fluss
Es ist keine Benutzeranmeldung erforderlich. Der Agent authentifiziert sich selbst, indem er die Anmeldeinformationen des Blueprints verwendet.
- Der Benutzer sendet eine Abfrage über die Chat-Ui.
- Der Agent (oder LangGraph ReAct-Agent) entscheidet, das
get_weatherTool aufzurufen. - Das Tool fordert einen Autorisierungs-Header vom Sidecar bei
GET /AuthorizationHeaderUnauthenticated/graph-app?AgentIdentity={agentAppId}an. - Das Sidecar führt einen Austausch von Anmeldeinformationen des Clients mit Microsoft Entra ID durch und erhält TR (nur App,
idtyp=app). - Das Tool ruft die Wetter-API mit
Authorization: Bearer TR. - Die Wetter-API überprüft TR (Signatur, Aussteller, Ablaufdatum, Zielgruppe) und gibt Wetterdaten zurück.
Grundlegendes zum On-Behalf-Of-Tokenfluss (OBO)
Der Agent fungiert im Namen eines angemeldeten Benutzers. Das Sidecar führt einen dreistufigen Tokenaustausch durch.
- Der Benutzer meldet sich über MSAL.js im Browser an und empfängt Tc (Benutzerzugriffstoken, Zielgruppe =
api://{BlueprintAppId}). - Der Benutzer sendet eine Abfrage. Der Agent erhält Tc mit der Anfrage.
- Das Tool fordert einen Autorisierungs-Header vom Sidecar bei
GET /AuthorizationHeader/graphan und übergibtAuthorization: Bearer Tcund?AgentIdentity={agentAppId}. - Das Sidecar validiert Tc, führt einen Client Anmeldeinformationen Exchange durch, um T1 zu erhalten, und führt dann einen OBO Exchange durch, um TR zu erhalten (delegiert,
idtyp=user). Der OBO-Austausch verwendetassertion=Tc,client_assertion=T1undgrant_type=jwt-bearer. - Das Tool ruft die Wetter-API mit
Authorization: Bearer TR. - Die Wetter-API überprüft TR und gibt Wetterdaten zurück. TR fungiert im Namen des angemeldeten Benutzers.
Umgebungsvariablen konfigurieren
Tipp
Wenn Sie bereits eine .env-Datei aus einer früheren Ausführung mit TENANT_ID, BLUEPRINT_APP_ID, BLUEPRINT_CLIENT_SECRET und AGENT_CLIENT_ID ausgefüllt haben, fahren Sie mit Start the Stack fort. Die Microsoft Entra Objekte überdauern Containerneustarts und docker compose down.
Kopieren Sie die Beispielumgebungsdatei, und fügen Sie Ihre Microsoft Entra Werte hinzu:
Erstellen Sie eine lokale Umgebungsdatei aus der Beispielvorlage, damit Sie Ihre Mandanten- und App-Registrierungswerte ausfüllen können:
cp .env.example .env
Öffnen Sie den Editor .env und setzen Sie die folgenden Werte auf.
| Variable | Description |
|---|---|
TENANT_ID |
Ihre Microsoft Entra Mandanten-ID. |
BLUEPRINT_APP_ID |
Die Client-ID der Blueprint-App-Registrierung. Das Sidecar authentifiziert sich als diese App. |
BLUEPRINT_CLIENT_SECRET |
Der geheime Blueprint-Clientschlüssel. Wird nur für die lokale Entwicklung verwendet. |
AGENT_CLIENT_ID |
Ihre Client-ID für die Agentenidentität. Wird als AgentIdentity Abfrageparameter an den Sidecar übergeben. |
CLIENT_SPA_APP_ID |
Die Client-ID der Registrierung der SPA-Anwendung. Nur für den OBO Flow erforderlich. |
OLLAMA_MODEL |
Das zu verwendende Ollama-Modell. Wird standardmäßig auf qwen2.5:1.5b festgelegt. |
Der autonome Fluss erfordert TENANT_ID, BLUEPRINT_APP_ID, BLUEPRINT_CLIENT_SECRET, und AGENT_CLIENT_ID. Der OBO Flow erfordert ebenfalls CLIENT_SPA_APP_ID.
In diesem Sidecar-Beispiel wird ClientSecret als Typ der Anmeldeinformationsquelle verwendet. Das Sidecar unterstützt die folgenden Anmeldeinformationen über die AzureAd__ClientCredentials__0__SourceType-Einstellung in docker-compose.yml:
-
ClientSecret: Nur lokale Entwicklung. Dieser Typ ist die Standardeinstellung für dieses Beispiel. -
SignedAssertionFromManagedIdentity: Auf Azure bereitgestellt. Null Geheimnisse, empfohlen für die Produktion. -
KeyVault: Zertifikat von Azure Key Vault. -
StoreWithThumbprint: Zertifikat aus dem lokalen Computerspeicher.
Einrichten der OBO-Anmeldung (optional)
Um den On-Behalf-of Flow zu testen, erstellen Sie die SPA App und konfigurieren Sie die OBO Zustimmung. Führen Sie eines der folgenden Skriptpaare aus dem Repositorystamm aus:
# Create the SPA app registration for MSAL.js browser sign-in
bash ../../scripts/setup-obo-client-app.sh
# → prints CLIENT_SPA_APP_ID
# Wire up the OBO scope + admin consent on the Blueprint
bash ../../scripts/setup-obo-blueprint.sh
Fügen Sie der CLIENT_SPA_APP_ID Datei nach dem Ausführen der Skripts den .env Wert hinzu.
Starten des Stacks
Erstellen Sie die Containerimages, und starten Sie alle vier Dienste im getrennten Modus, indem Sie den folgenden Befehl ausführen:
docker compose up --build -d
Die erste Ausführung dauert etwa 30 Sekunden, während Ollama das qwen2.5:1.5b Modell lädt. Um zu überprüfen, ob der lokale Beispiel-Stack läuft und ob Komponenten wie das Sidecar und Ollama bereit sind, rufen Sie den Statusendpunkt ab:
curl http://localhost:3003/api/status
Die Antwort zeigt ollama_available: true, wenn der Stapel bereit ist.
Senden einer Abfrage über die Chat-Ui
Führen Sie die folgenden Schritte aus, um eine Testabfrage über die Chat-UI zu senden und den Tokenfluss zu beobachten:
Öffnen Sie
http://localhost:3003in Ihrem Browser.Überprüfen Sie in der Kopfzeile, ob Ihre Mandanten-ID und Die Agent-ID angezeigt werden.
Verwenden Sie die beiden Umschaltfläche, um Ihre Demokonfiguration auszuwählen:
- Ausführungsmodus: Wählen Sie "Direkt " aus, um die LLM zu überspringen und die Wetter-API direkt aufzurufen, oder wählen Sie "Ollama " aus, um einen LangChain ReAct-Agent zu verwenden.
- Identitätsfluss: Wählen Sie "Autonom" für ein Nur-App-Token oder OBO aus, um im Namen eines angemeldeten Benutzers zu handeln. Wählen Sie für OBO die Option "Anmelden " aus, um sich über ein MSAL.js-Popup zu authentifizieren.
Senden Sie die vorab aufgefüllte Abfrage "Wetter in Dallas?", und überprüfen Sie das Ergebnis.
Erweitern Sie im rechten Bereich Identity Trace, um jeden Schritt des Tokenflusses zu überprüfen.
- Die Token-Anfrage an den Sidecar, einschließlich des Parameters
AgentIdentity. - Decodierte JWT-Ansprüche für jedes Token (Tc, T1, TR für OBO; T1 und TR für autonom).
- Nachgeschaltete API-Validierungsergebnisse, einschließlich Signatur- (JWKS, RS256), Aussteller-, Ablauf- und Zielgruppenprüfungen.
- Die Token-Anfrage an den Sidecar, einschließlich des Parameters
Häufige Probleme beheben
| Symptom | Wahrscheinliche Ursache | Beheben |
|---|---|---|
/api/status gibt ollama_available: false zurück. |
Das Modell wird noch heruntergeladen. | Warten Sie ca. 30 Sekunden. Überprüfen von Protokollen mithilfe von docker logs ollama-dev. |
Wetter-API gibt zurück 401 Unauthorized |
Diskrepanz zwischen Token und Mandant, abgelaufenes Secret oder Signaturprüfung fehlgeschlagen. | Verifizieren Sie, dass TENANT_ID mit dem Mandanten des Blueprints übereinstimmt. Prüfen Sie Sidecar-Protokolle mit docker logs agent-id-sidecar-dev. |
| LLM gibt Wetter zurück, ohne das Tool aufzurufen | Das qwen2.5:1.5b Modell ist zu klein für zuverlässige Toolaufrufe. |
Wechseln Sie OLLAMA_MODEL zu qwen2.5:7b oder llama3.1:8b in Ihrer .env Datei. |
| Das OBO-Anmeldepopup ist blockiert. | Browser-Popupblocker ist aktiv. | Popups zulassen für localhost:3003. |
4xx Fehler von Sidecar während OBO |
CLIENT_SPA_APP_ID fehlt, oder der SPA-Umleitungs-URI stimmt nicht überein. |
Führen Sie die OBO-Setupskripts erneut aus. Stellen Sie sicher, dass http://localhost:3003 in den Umleitungs-URIs der SPA aufgeführt ist. |
Um Start-, Authentifizierungs- oder Downstream-API-Probleme zu diagnostizieren, zeigen Sie die Protokolle von jedem Container an, indem Sie die folgenden Befehle ausführen:
docker logs llm-agent-dev
docker logs agent-id-sidecar-dev
docker logs weather-api-dev
Bereinigen von Ressourcen
Stoppen Sie die Container, wenn Sie fertig sind. Wählen Sie die Bereinigungsstufe aus, die Ihren Anforderungen entspricht. Mit dem ersten Befehl werden die Democontainer beendet, während Volumes und Bilder für einen schnelleren Neustart später beibehalten werden:
# Stop containers, keep volumes and images
docker compose down
# Stop containers and remove the Ollama model cache
docker compose down -v
# Remove containers, volumes, and images
docker compose down -v --rmi all