Udostępnij za pośrednictwem


Rozwiązywanie problemów z uwierzytelnianiem aplikacji hostowanych na platformie Azure

Ten artykuł zawiera wskazówki dotyczące rozwiązywania problemów napotkanych podczas uwierzytelniania zestawu Azure SDK dla aplikacji Java hostowanych na platformie Azure za pomocą różnych TokenCredential implementacji. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie aplikacji Java hostowanych na platformie Azure.

Rozwiązywanie problemów z wartością domyślnąAzureCredential

W przypadku korzystania z programu DefaultAzureCredentialmożesz opcjonalnie wypróbować/złapać dla elementu CredentialUnavailableException. W poniższej tabeli przedstawiono błędy wskazujące ten wyjątek oraz metody ograniczania ryzyka:

Komunikat o błędzie opis Ograniczanie ryzyka
CredentialUnavailableException raised with message "DefaultAzureCredential failed to retrieve a token from the included credentials." Wszystkie poświadczenia w łańcuchu DefaultAzureCredential nie mogą pobrać tokenu, z których każdy zgłasza CredentialUnavailableExceptionbłąd . Włącz rejestrowanie , aby zweryfikować próby poświadczeń i uzyskać dalsze informacje diagnostyczne.

Aby uzyskać więcej informacji, zobacz przewodnik rozwiązywania problemów dla jednego z następujących podstawowych typów poświadczeń:
- EnvironmentCredential
- ManagedIdentityCredential
- VisualStudioCodeCredential
- AzureCLICredential
- AzurePowershellCredential
HttpResponseException raised from the client with a status code of 401 or 403 Uwierzytelnianie zakończyło się pomyślnie, ale autoryzowanie usługi platformy Azure odpowiedziało kodem stanu 401 (Uwierzytelnianie) lub 403 (Zabronione). Ten problem często występuje, gdy DefaultAzureCredential uwierzytelnia konto inne niż zamierzone lub zamierzone konto nie ma przypisanych odpowiednich uprawnień ani ról. Włącz rejestrowanie , aby określić, które poświadczenia w łańcuchu zwróciły token uwierzytelniania.

W przypadku, gdy poświadczenie inne niż oczekiwane zwraca token, poszukaj obejścia tego problemu, wyloguj się z odpowiedniego narzędzia programistycznego.

Upewnij się, że do używanego konta przypisano prawidłową rolę. Na przykład rola specyficzna dla usługi, a nie rola właściciel subskrypcji.

Rozwiązywanie problemów ze środowiskiemTworzenie

W przypadku korzystania z programu EnvironmentCredentialmożesz opcjonalnie wypróbować/złapać dla elementu CredentialUnavailableException. W poniższej tabeli przedstawiono błędy wskazujące ten wyjątek oraz metody ograniczania ryzyka:

Komunikat o błędzie opis Ograniczanie ryzyka
Environment variables aren't fully configured. Nie ustawiono prawidłowej kombinacji zmiennych środowiskowych. Upewnij się, że odpowiednie zmienne środowiskowe są ustawione przed uruchomieniem aplikacji dla zamierzonej metody uwierzytelniania, zgodnie z opisem na poniższej liście:
— Aby uwierzytelnić jednostkę usługi przy użyciu klucza tajnego klienta, upewnij się, że zmienne AZURE_CLIENT_ID, AZURE_TENANT_IDi AZURE_CLIENT_SECRET są prawidłowo ustawione.
— Aby uwierzytelnić jednostkę usługi przy użyciu certyfikatu, upewnij się, że zmienne AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_CERTIFICATE_PATHi opcjonalnie AZURE_CLIENT_CERTIFICATE_PASSWORD są poprawnie ustawione.
— Aby uwierzytelnić użytkownika przy użyciu hasła, upewnij się, że zmienne AZURE_USERNAME i AZURE_PASSWORD zostały prawidłowo ustawione.

Rozwiązywanie problemów z elementem ManagedIdentityCredential

ManagedIdentityCredential program jest przeznaczony do pracy na różnych hostach platformy Azure, które zapewniają tożsamość zarządzaną. Konfigurowanie tożsamości zarządzanej i rozwiązywanie problemów z błędami różni się od hosta do hosta. Na poniższej liście przedstawiono środowiska hosta platformy Azure, które można przypisać tożsamość zarządzaną i które ManagedIdentityCredential obsługują:

Tożsamość zarządzana maszyny wirtualnej platformy Azure

W przypadku korzystania z programu ManagedIdentityCredentialmożesz opcjonalnie wypróbować/złapać dla elementu CredentialUnavailableException. W poniższej tabeli przedstawiono błędy wskazujące ten wyjątek oraz metody ograniczania ryzyka:

Komunikat o błędzie opis Ograniczanie ryzyka
The requested identity hasn't been assigned to this resource. Punkt końcowy usługi Azure Instance Metadata Service (IMDS) odpowiedział kodem stanu 400, wskazując, że żądana tożsamość nie jest przypisana do maszyny wirtualnej. Jeśli używasz tożsamości przypisanej przez użytkownika, upewnij się, że określona clientId wartość jest poprawna.

Jeśli używasz tożsamości przypisanej przez system, upewnij się, że została ona prawidłowo włączona. Aby uzyskać więcej informacji, zobacz sekcję Włączanie tożsamości zarządzanej przypisanej przez system w istniejącej maszynie wirtualnej w temacie Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej przy użyciu witryny Azure Portal.
The request failed due to a gateway error. Żądanie do punktu końcowego USŁUGI IMDS nie powiodło się z powodu błędu bramy, kodu stanu 502 lub 504. Usługa IMDS nie obsługuje wywołań za pośrednictwem serwera proxy ani bramy. Wyłączanie serwerów proxy lub bram uruchomionych na maszynie wirtualnej na potrzeby wywołań do punktu końcowego usługi IMDS http://169.254.169.254/
No response received from the managed identity endpoint. Nie odebrano odpowiedzi dla żądania IMDS lub upłynął limit czasu żądania. — Upewnij się, że tożsamość zarządzana została prawidłowo skonfigurowana na maszynie wirtualnej. Aby uzyskać więcej informacji, zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej przy użyciu witryny Azure Portal.
— Sprawdź, czy punkt końcowy USŁUGI IMDS jest osiągalny na maszynie wirtualnej. Aby uzyskać więcej informacji, zobacz następną sekcję.
Multiple attempts failed to obtain a token from the managed identity endpoint. Ponowne próby pobrania tokenu z punktu końcowego USŁUGI IMDS zostały wyczerpane. — Aby uzyskać więcej informacji na temat określonych błędów, zobacz wewnętrzne komunikaty wyjątków. Jeśli dane zostały obcięte, można uzyskać więcej szczegółów, zbierając dzienniki.
— Upewnij się, że tożsamość zarządzana została prawidłowo skonfigurowana na maszynie wirtualnej. Aby uzyskać więcej informacji, zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej przy użyciu witryny Azure Portal.
— Sprawdź, czy punkt końcowy USŁUGI IMDS jest osiągalny na maszynie wirtualnej. Aby uzyskać więcej informacji, zobacz następną sekcję.

Sprawdź, czy usługa IMDS jest dostępna na maszynie wirtualnej

Jeśli masz dostęp do maszyny wirtualnej, możesz sprawdzić, czy punkt końcowy tożsamości zarządzanej jest dostępny za pośrednictwem wiersza polecenia przy użyciu polecenia , curljak pokazano w poniższym przykładzie:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"

Ostrzeżenie

Dane wyjściowe tego polecenia zawierają prawidłowy token dostępu. Aby uniknąć naruszenia zabezpieczeń konta, nie udostępniaj tego tokenu dostępu.

Tożsamość zarządzana usług Azure App Service i Azure Functions

W przypadku korzystania z programu ManagedIdentityCredentialmożesz opcjonalnie wypróbować/złapać dla elementu CredentialUnavailableException. W poniższej tabeli przedstawiono błędy wskazujące ten wyjątek oraz metody ograniczania ryzyka:

Komunikat o błędzie opis Ograniczanie ryzyka
ManagedIdentityCredential authentication unavailable. Zmienne środowiskowe skonfigurowane przez hosta usługi App Services nie były obecne. — Upewnij się, że tożsamość zarządzana została prawidłowo skonfigurowana w wystąpieniu usługi App Service. Aby uzyskać więcej informacji, zobacz How to use managed identities for App Service and Azure Functions (Jak używać tożsamości zarządzanych dla usług App Service i Azure Functions).
— Sprawdź, czy środowisko usługi App Service zostało prawidłowo skonfigurowane i czy punkt końcowy tożsamości zarządzanej jest dostępny. Aby uzyskać więcej informacji, zobacz następną sekcję.

Sprawdź, czy punkt końcowy tożsamości zarządzanej usługi App Service jest dostępny

Jeśli masz dostęp do protokołu SSH w wystąpieniu usługi App Service, możesz sprawdzić, czy tożsamość zarządzana jest dostępna w środowisku. Najpierw upewnij się, że ustawiono zmienne MSI_ENDPOINT środowiskowe i MSI_SECRET w środowisku. Następnie możesz sprawdzić, czy punkt końcowy tożsamości zarządzanej jest dostępny przy użyciu metody curl, jak pokazano w poniższym przykładzie:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"

Ostrzeżenie

Dane wyjściowe tego polecenia zawierają prawidłowy token dostępu. Aby uniknąć naruszenia zabezpieczeń konta, nie udostępniaj tego tokenu dostępu.

Tożsamość zarządzana usługi Azure Kubernetes Service

Tożsamość zasobnika dla platformy Kubernetes

W przypadku korzystania z programu ManagedIdentityCredentialmożesz opcjonalnie wypróbować/złapać dla elementu CredentialUnavailableException. W poniższej tabeli przedstawiono błędy wskazujące ten wyjątek oraz metody ograniczania ryzyka:

Komunikat o błędzie opis Ograniczanie ryzyka
No Managed Identity endpoint found Aplikacja próbowała uwierzytelnić się przed przypisaniem tożsamości do zasobnika. Sprawdź, czy zasobnik jest poprawnie oznaczony etykietą. Ten problem występuje również, gdy poprawnie oznaczony zasobnik uwierzytelnia się przed przygotowaniem tożsamości. Aby zapobiec wyścigom inicjowania, skonfiguruj NMI, aby ustawić Retry-After nagłówek w odpowiedziach. Aby uzyskać więcej informacji, zobacz Set Retry-After header in NMI response (Ustawianie nagłówka Po ponowieniu próby w odpowiedzi NMI) w dokumentacji tożsamości zasobnika.

Rozwiązywanie problemów z obciążeniamidentityCredential

W przypadku korzystania z programu WorkloadIdentityCredentialmożesz opcjonalnie wypróbować/złapać dla elementu CredentialUnavailableException. W poniższej tabeli przedstawiono błędy wskazujące ten wyjątek oraz metody ograniczania ryzyka:

Komunikat o błędzie opis Ograniczanie ryzyka
WorkloadIdentityCredential authentication unavailable. The workload options aren't fully configured. WorkloadIdentityCredential wymaga clientIdelementu tenantId i tokenFilePath do uwierzytelnienia przy użyciu identyfikatora Entra firmy Microsoft. Jeśli używasz metody DefaultAzureCredential, wykonaj:
— Upewnij się, że identyfikator klienta jest określony za pośrednictwem workloadIdentityClientId ustawiania lub zmiennej środowiskowej AZURE_CLIENT_ID .
— Upewnij się, że identyfikator dzierżawy jest określony za pośrednictwem zmiennej środowiskowej AZURE_TENANT_ID .
— Upewnij się, że została określona ścieżka pliku tokenu za pośrednictwem zmiennej środowiskowej AZURE_FEDERATED_TOKEN_FILE .
- Upewnij się, że host urzędu jest określony za pośrednictwem zmiennej środowiskowej AZURE_AUTHORITY_HOST .

Jeśli używasz metody WorkloadIdentityCredential, wykonaj:
— Upewnij się, że identyfikator dzierżawy jest określony za pośrednictwem tenantId ustawiania w konstruktorze poświadczeń lub zmiennej środowiskowej AZURE_TENANT_ID .
— Upewnij się, że identyfikator klienta jest określony za pośrednictwem clientId ustawiania w konstruktorze poświadczeń lub zmiennej środowiskowej AZURE_CLIENT_ID .
— Upewnij się, że ścieżka pliku tokenu jest określona za pośrednictwem tokenFilePath ustawiania w konstruktorze poświadczeń lub zmiennej środowiskowej AZURE_FEDERATED_TOKEN_FILE .
— Inne problemy można znaleźć w przewodniku rozwiązywania problemów z produktem.

Następne kroki

Jeśli wskazówki dotyczące rozwiązywania problemów w tym artykule nie pomogą rozwiązać problemów podczas korzystania z bibliotek klienckich zestawu Azure SDK dla języka Java, zalecamy zgłoszenie problemu w repozytorium GitHub zestawu Azure SDK dla języka Java.