Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak uruchomić Microsoft Entra Auth SDK sidecar w środowisku lokalnym przy użyciu narzędzia Docker Compose. Uruchamiasz czterokontenerowy stos — agent czatu, przyczepkę, podrzędny interfejs API pogody i lokalny moduł LLM (Ollama). Następnie wysyłasz zapytanie za pośrednictwem interfejsu użytkownika czatu i obserwujesz pełny przepływ tokenu z agenta do interfejsu API.
W przykładzie przedstawiono dwa tryby uruchamiania i dwa przepływy tożsamości.
| Autonomiczny (tylko aplikacja) | OBO (w imieniu użytkownika) | |
|---|---|---|
| Bezpośredni (bez LLM) | Agent pobiera token i bezpośrednio wywołuje API pogodowe. | To samo, ale przyczepka wymienia token zalogowanego użytkownika. |
| Ollama + LangChain | LangGraph ReAct agent decyduje, kiedy wywołać narzędzie get_weather. |
Analogicznie, agent przekazuje dalej token użytkownika. |
Wymagania wstępne
Ten przykład działa w systemach macOS, Linux i Windows 10/11.
| Wymóg | macOS | Linux | Windows |
|---|---|---|---|
| Docker | Docker Desktop | Silnik Docker + Compose v2 | Docker Desktop (zalecane jest zaplecze WSL 2) |
| PowerShell 7+ | brew install --cask powershell |
Instalowanie programu PowerShell w systemie Linux | Wbudowane (lub zainstaluj PowerShell 7 lub nowszy) |
| Azure CLI | brew install azure-cli |
Zainstaluj Azure CLI | winget install -e Microsoft.AzureCLI |
Potrzebujesz również dzierżawy Microsoft Entra z wyszczególnionymi obiektami:
- Szablon tożsamości agenta z tajnym kluczem klienta. Rejestruj wartości dla
BLUEPRINT_APP_IDiBLUEPRINT_CLIENT_SECRET. - Tożsamość agenta utworzona na podstawie tej strategii. Zarejestruj element
AGENT_CLIENT_ID. - (Tylko przepływ OBO) Rejestracja aplikacji SPA. Zarejestruj element
CLIENT_SPA_APP_ID.
Aby utworzyć te obiekty, wykonaj przebieg pracy programu PowerShell w repozytorium przykładów Identyfikator agenta Microsoft Entra. Przepływ pracy tworzy aplikację strategii, tożsamość agenta i opcjonalnie aplikację SPA na potrzeby logowania OBO.
Ollama nie jest wymaganiem wstępnym na hoście — działa wewnątrz stosu Compose i pobiera qwen2.5:1.5b automatycznie.
Klonowanie przykładowego repozytorium
Sklonuj repozytorium i przejdź do sidecar/dev katalogu:
git clone https://github.com/microsoft/entra-agentid-samples.git
cd entra-agentid-samples/sidecar/dev
Architektura
Stos uruchamia cztery kontenery w wewnętrznej sieci Docker: llm-agent-dev (interfejs czatu Flask, dostępny na porcie 3003), agent-id-sidecar-dev (sidecar SDK uwierzytelniania Microsoft Entra), weather-api-dev (podrzędny interfejs API weryfikujący tokeny agenta) i ollama-dev (lokalny moduł LLM). Tylko interfejs użytkownika czatu jest udostępniany hostowi; interfejs API przyczepki i pogody jest dostępny tylko z poziomu sieci platformy Docker.
Wszystkie cztery kontenery działają w udostępnionej sieci typu bridge Docker (agent-network-dev). Dostępny dla hosta jest tylko interfejs użytkownika czatu (port 3003). Interfejs API przyczepki i pogody nie ma portu hosta, który przechowuje punkt końcowy tokenu wewnątrz granicy zaufania.
Ścieżka żądania działa następująco:
- Otworzysz
http://localhost:3003w przeglądarce i wyślesz zapytanie. - Agent (
llm-agent-dev) odbiera zapytanie i podejmuje decyzję o wywołaniuget_weathernarzędzia. - Narzędzie pyta przyczepkę o nagłówek autoryzacji pod adresem
GET /AuthorizationHeader...?AgentIdentity={agentId}. - Sidecar (
agent-id-sidecar-dev) wykonuje wymianę OAuth 2.0 z Microsoft Entra ID i otrzymuje token (TR). - Moduł pomocniczy zwraca
Authorization: Bearer TRnagłówek do agenta. - Agent wywołuje interfejs API pogody (
weather-api-dev) z tym nagłówkiem. - Interfejs API pogody weryfikuje TR (JWKS, RS256, wystawcę, wygaśnięcie, odbiorców) i zwraca dane pogodowe.
Agent nigdy nie kontaktuje się z Microsoft Entra ID bezpośrednio, i nigdy nie widzi poświadczeń. Zwraca się do sidecar o nagłówek Authorization, otrzymuje token Bearer i przekazuje ten token do interfejsu API pogody. Tylko przyczepka komunikuje się z login.microsoftonline.com.
Omówienie przepływu tokenu
Przepływ autonomiczny używa dwóch tokenów: T1 (token aplikacji wzorcowej uzyskany z poświadczeń klienta) i TR (token agenta dla interfejsu API usługi zależnej). Przepływ OBO dodaje trzeci: Tc (token dostępu użytkownika z logowania MSAL.js przeglądarki). Przyczepka obsługuje wszystkie pozyskiwanie i buforowanie tokenów, dzięki czemu kod agenta nigdy nie zarządza poświadczeniami bezpośrednio.
Przepływ autonomiczny
Logowanie użytkownika nie jest wymagane. Agent uwierzytelnia się jako siebie, używając poświadczeń klienta planu.
- Użytkownik wysyła zapytanie za pośrednictwem interfejsu użytkownika czatu.
- Agent (lub agent LangGraph ReAct) decyduje się użyć narzędzia
get_weather. - Narzędzie żąda nagłówka autoryzacji z przyczepki pod adresem
GET /AuthorizationHeaderUnauthenticated/graph-app?AgentIdentity={agentAppId}. - Sidecar wykonuje wymianę poświadczeń klienta z Microsoft Entra ID i odbiera TR (tylko do aplikacji,
idtyp=app). - Narzędzie wywołuje interfejs API pogody za pomocą polecenia
Authorization: Bearer TR. - Interfejs API pogody sprawdza token (podpis, wystawca, wygaśnięcie, odbiorca) i zwraca dane pogodowe.
przepływ OBO
Agent działa w imieniu zalogowanego użytkownika. Moduł boczny wykonuje trzyetapową wymianę tokenów.
- Użytkownik loguje się za pośrednictwem MSAL.js w przeglądarce i otrzymuje token dostępu użytkownika (audience =
api://{BlueprintAppId}). - Użytkownik wysyła zapytanie. Agent otrzymuje Tc razem z żądaniem.
- Narzędzie żąda nagłówka autoryzacji z sidecar pod adresem
GET /AuthorizationHeader/graph, przekazującAuthorization: Bearer Tci?AgentIdentity={agentAppId}. - Sidecar weryfikuje Tc, wykonuje wymianę poświadczeń klienta w celu uzyskania T1, a następnie wykonuje wymianę OBO w celu uzyskania TR (delegowane,
idtyp=user). Giełda OBO używaassertion=Tc,client_assertion=T1igrant_type=jwt-bearer. - Narzędzie wywołuje interfejs API pogody za pomocą polecenia
Authorization: Bearer TR. - API pogody weryfikuje TR i zwraca dane pogodowe. Tr działa w imieniu zalogowanego użytkownika.
Konfigurowanie zmiennych środowiskowych
Tip
Jeśli masz .env już plik z poprzedniego przebiegu, w którym elementy TENANT_ID, BLUEPRINT_APP_ID, BLUEPRINT_CLIENT_SECRET i AGENT_CLIENT_ID są wypełnione, przejdź do sekcji Uruchom stos. Obiekty Microsoft Entra przetrwają ponowne uruchomienie kontenera i docker compose down.
Skopiuj przykładowy plik środowiska i dodaj wartości Microsoft Entra:
cp .env.example .env
Otwórz .env plik w edytorze i ustaw następujące wartości:
| Zmienna | Description |
|---|---|
TENANT_ID |
Twój identyfikator dzierżawy Microsoft Entra. |
BLUEPRINT_APP_ID |
Identyfikator klienta rejestracji aplikacji szablonu. Przyczepka uwierzytelnia się jako ta aplikacja. |
BLUEPRINT_CLIENT_SECRET |
Sekret klienta blueprintu. Służy tylko do programowania lokalnego. |
AGENT_CLIENT_ID |
Identyfikator klienta tożsamości agenta. Przekazano jako AgentIdentity parametr zapytania do przyczepki. |
CLIENT_SPA_APP_ID |
Identyfikator klienta rejestracji aplikacji SPA. Wymagany tylko dla przepływu OBO. |
OLLAMA_MODEL |
Model Ollama do użycia. Wartość domyślna to qwen2.5:1.5b. |
Przepływ autonomiczny wymaga TENANT_ID, BLUEPRINT_APP_ID, BLUEPRINT_CLIENT_SECRET, i AGENT_CLIENT_ID. Przepływ OBO wymaga również CLIENT_SPA_APP_ID.
W tym przykładzie użyto ClientSecret jako typu źródła poświadczeń. Przyczepka obsługuje następujące typy poświadczeń za pomocą ustawienia w pliku AzureAd__ClientCredentials__0__SourceTypedocker-compose.yml:
-
ClientSecret: Tylko lokalny rozwój. Ten typ jest domyślny dla tego przykładu. -
SignedAssertionFromManagedIdentity: Wdrożono na Azure. Zero tajemnic, zalecane do użycia w środowisku produkcyjnym. -
KeyVault: Certyfikat z Azure Key Vault. -
StoreWithThumbprint: Certyfikat z magazynu komputerów lokalnych.
Konfigurowanie logowania OBO (opcjonalnie)
Aby przetestować przepływ wykonywany w imieniu użytkownika, utwórz aplikację SPA i skonfiguruj zgodę OBO. Uruchom jedną z następujących par skryptów z katalogu głównego repozytorium:
# 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
CLIENT_SPA_APP_ID Dodaj wartość do .env pliku po uruchomieniu skryptów.
Uruchamianie stosu
Uruchom wszystkie cztery kontenery:
docker compose up --build -d
Pierwsze uruchomienie trwa około 30 sekund, podczas gdy Ollama ściąga qwen2.5:1.5b model. Aby sprawdzić, czy stos jest gotowy:
curl http://localhost:3003/api/status
Odpowiedź jest wyświetlana ollama_available: true , gdy stos jest gotowy.
Wysyłanie zapytania za pośrednictwem interfejsu użytkownika czatu
Otwórz
http://localhost:3003w przeglądarce.Na pasku nagłówka sprawdź, czy jest wyświetlany identyfikator dzierżawy i identyfikator agenta .
Użyj dwóch przycisków, aby wybrać konfigurację demonstracyjną:
- Tryb wykonywania: wybierz Bezpośredni, aby pominąć LLM i wywołać interfejs API pogody bezpośrednio, lub wybierz Ollama, aby użyć agenta ReAct LangChain.
- Przepływ tożsamości: wybierz Autonomiczny dla tokenu tylko aplikacji lub OBO, aby wykonywać działania w imieniu zalogowanego użytkownika. W przypadku aplikacji OBO wybierz pozycję Zaloguj się, aby uwierzytelnić się za pomocą okna MSAL.js.
Wyślij wstępnie wypełnione zapytanie "Pogoda w Dallas?" i sprawdź wynik.
W panelu po prawej stronie rozwiń pozycję Identity Trace (Śledzenie tożsamości), aby sprawdzić każdy krok przepływu tokenu:
- Żądanie tokenu do sidecaru, w tym parametr
AgentIdentity. - Zdekodowane oświadczenia JWT dla każdego tokenu (Tc, T1, TR dla OBO; T1 i TR dla autonomicznego).
- Wyniki walidacji interfejsu API podrzędnego, w tym sygnatury (JWKS, RS256), wystawcy, wygaśnięcia i kontroli odbiorców.
- Żądanie tokenu do sidecaru, w tym parametr
Rozwiązywanie typowych problemów
| Objaw | Prawdopodobna przyczyna | Napraw |
|---|---|---|
/api/status Zwraca ollama_available: false |
Model jest nadal pobierany. | Poczekaj około 30 sekund. Sprawdź dzienniki przy użyciu polecenia docker logs ollama-dev. |
Interfejs API pogody zwraca 401 Unauthorized |
Niezgodność dla najemcy tokenu, wygasły klucz tajny lub weryfikacja podpisu nie powiodła się. | Sprawdź, czy TENANT_ID jest zgodny z najemcą szablonu. Sprawdź dzienniki sidecar za pomocą docker logs agent-id-sidecar-dev. |
| LLM zwraca informacje o pogodzie bez uruchamiania narzędzia | Model qwen2.5:1.5b jest zbyt mały do niezawodnego wywoływania narzędzi. |
Zmień OLLAMA_MODEL wartość na qwen2.5:7b lub llama3.1:8b w .env pliku. |
| Logowanie OBO — okienko jest zablokowane | Blokowanie wyskakujących okienek przeglądarki jest aktywne. | Zezwalaj na wyskakujące okienka dla localhost:3003. |
4xx błąd z przyczepki podczas OBO |
CLIENT_SPA_APP_ID jest brakujący lub identyfikator URI przekierowania SPA nie jest zgodny. |
Uruchom ponownie skrypty konfiguracji OBO. Sprawdź, czy http://localhost:3003 jest na liście URI przekierowań dla SPA. |
Aby wyświetlić dzienniki kontenera dla dowolnej usługi:
docker logs llm-agent-dev
docker logs agent-id-sidecar-dev
docker logs weather-api-dev
Uprzątnij zasoby
Po zakończeniu zatrzymaj kontenery.
# 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
Treści powiązane
- Uwierzytelnianie przy użyciu Auth SDK (sidecar)
- Dokumentacja SDK Microsoft Entra dla identyfikatora agenta
- Uzyskiwanie tokenów i wywoływanie dalszych interfejsów API przy użyciu zestawu SDK Microsoft Entra dla identyfikatora agenta
- Weryfikowanie tokenów tożsamości agenta w interfejsie API podrzędnym
- Repozytorium przykładów Identyfikator agenta Microsoft Entra