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.
Die Azure Identitätsbibliothek stellt Credentials bereit– öffentliche Klassen, die die schnittstelle Azure Core Library TokenCredential implementieren. Eine Anmeldeinformation stellt einen eindeutigen Authentifizierungsfluss zum Abrufen eines Zugriffstokens aus Microsoft Entra ID dar. Diese Anmeldedaten können miteinander verkettet werden, um eine geordnete Abfolge von Authentifizierungsmechanismen zu bilden, die versucht werden sollen.
Funktionsweise von verketteten Anmeldeinformationen
Zur Laufzeit versucht eine Anmeldeinformationskette, sich mit den ersten Anmeldeinformationen der Sequenz zu authentifizieren. Wenn diese Anmeldeinformationen kein Zugriffstoken abrufen, werden die nächsten Anmeldeinformationen in der Sequenz ausprobiert usw., bis erfolgreich ein Zugriffstoken abgerufen wurde. Das unten stehende Diagramm veranschaulicht dieses Verhalten:
Gründe für die Verwendung von Anmeldeinformationsketten
Verkettete Anmeldeinformationen können die folgenden Vorteile bieten:
Umgebungsbewusstsein: Wählt automatisch die am besten geeigneten Anmeldeinformationen basierend auf der Umgebung aus, in der die App ausgeführt wird. Ohne sie müssten Sie Code wie diesen schreiben:
import com.azure.core.credential.TokenCredential; import com.azure.identity.AzureCliCredentialBuilder; import com.azure.identity.ManagedIdentityCredentialBuilder; // Code omitted for brevity TokenCredential credential = null; // Set up credential based on environment (Azure or local development) String environment = System.getenv("ENV"); if (environment != null && environment.equals("production")) { credential = new ManagedIdentityCredentialBuilder() .clientId(userAssignedClientId) .build(); } else { credential = new AzureCliCredentialBuilder() .build(); }Nahtlose Übergänge: Ihre App kann von der lokalen Entwicklung zur Staging- oder Produktionsumgebung wechseln, ohne den Authentifizierungscode zu ändern.
Verbesserte Resilienz: Enthält einen Fallbackmechanismus, der zu den nächsten Anmeldeinformationen wechselt, wenn der vorherige Fehler beim Abrufen eines Zugriffstokens auftritt.
So wählen Sie ein verkettetes Kredential
Es gibt zwei verschiedene Ansätze für die Verkettung von Anmeldeinformationen:
- Verwenden Sie eine vorkonfigurierte Kette: Beginnen Sie mit einer Meinungskette, die die am häufigsten verwendeten Authentifizierungsszenarien berücksichtigt. Informationen zu diesem Ansatz finden Sie im Abschnitt "DefaultAzureCredential overview ".
- "Erstellen" einer Kette: Beginnen Sie mit einer leeren Kette und schließen Sie nur das ein, was Sie benötigen. Informationen zu diesem Ansatz finden Sie im Abschnitt "ChainedTokenCredential" (Übersicht ).
Übersicht über DefaultAzureCredential
DefaultAzureCredential ist eine vorgabebasierte, vorkonfigurierte Kette von Anmeldeinformationen. Er wurde entwickelt, um viele Umgebungen zusammen mit den am häufigsten verwendeten Authentifizierungsflüssen und Entwicklertools zu unterstützen. In grafischer Form sieht die zugrunde liegende Kette wie folgt aus:
Die Reihenfolge, in der DefaultAzureCredential, versucht, Anmeldeinformationen zu erhalten, folgt.
| Bestellung | Berechtigung | Beschreibung |
|---|---|---|
| 1 | Umwelt | Liest eine Auflistung von environment-Variablen, um zu ermitteln, ob ein Anwendungsdienstprinzipal (Anwendungsbenutzer) für die App konfiguriert ist. Wenn ja, verwendet DefaultAzureCredential diese Werte, um die App beim Azure zu authentifizieren. Diese Methode kann bei der lokalen Entwicklung verwendet werden, wird jedoch am häufigsten in Serverumgebungen verwendet. |
| 2 | Workload-Identität | Wenn die App auf einem Azure-Host mit aktivierter Workload-Identität bereitgestellt wird, authentifizieren Sie dieses Konto. |
| 3 | Verwaltete Identität | Wenn die App auf einem Azure-Host mit aktivierter verwalteter Identität bereitgestellt wird, authentifizieren Sie die App bei Azure mithilfe dieser verwalteten Identität. |
| 4 | IntelliJ | Wenn sich der Entwickler über Azure Toolkit für IntelliJ authentifiziert hat, authentifizieren Sie dieses Konto. |
| 5 | Visual Studio Code | Wenn sich der Entwickler über die Azure Resources-Erweiterung für Visual Studio Code authentifiziert und das azure-identity-broker-Paket installiert ist, soll dieses Konto authentifiziert werden. |
| 6 | Azure CLI | Wenn sich der Entwickler über Azure CLI mithilfe des Befehls az login authentifiziert hat, authentifizieren Sie die App bei Azure mit demselben Konto. |
| 7 | Azure PowerShell | Wenn sich der Entwickler bei Azure Azure PowerShell mithilfe des Cmdlets Connect-AzAccount authentifiziert hat, authentifizieren Sie die App bei Azure mit demselben Konto. |
| 8 | Azure Developer CLI | Wenn sich der Entwickler mithilfe des Azure Developer-CLI-Befehls azd auth login bei Azure authentifiziert hat, authentifizieren Sie sich bei diesem Konto. |
| 9 | Broker | Authentifiziert sich mithilfe des Standardkontos, das über einen Broker beim Betriebssystem angemeldet ist. Erfordert, dass das Azure-Identity-Broker-Paket installiert ist, da eine brokerfähige Instanz InteractiveBrowserCredential verwendet wird. |
In der einfachsten Form können Sie die parameterlose Version von DefaultAzureCredential wie folgt verwenden:
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
// Code omitted for brevity
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.build();
So passen Sie DefaultAzureCredential an
In den folgenden Abschnitten werden Strategien beschrieben, um zu steuern, welche Anmeldeinformationen in die Kette aufgenommen werden.
Ausschließen einer Kategorie des Anmeldeinformationstyps
Um alle Developer tool oder Deployed service Anmeldeinformationen auszuschließen, setzen Sie die Umgebungsvariable AZURE_TOKEN_CREDENTIALS auf prod bzw. dev. Wenn ein Wert prod verwendet wird, sieht die zugrunde liegende Anmeldeinformationskette wie folgt aus:
Diagramm, das DefaultAzureCredential zeigt, wobei AZURE_TOKEN_CREDENTIALS auf "prod" festgelegt sind.
Wenn ein Wert dev verwendet wird, sieht die Kette wie folgt aus:
Diagramm, das zeigt, dass DefaultAzureCredential mit AZURE_TOKEN_CREDENTIALS auf "dev" gesetzt ist.
Von Bedeutung
Die AZURE_TOKEN_CREDENTIALS Umgebungsvariable wird in azure-identity Paketversionen 1.16.1 und höher unterstützt.
Um sicherzustellen, dass die Umgebungsvariable definiert und auf eine unterstützte Zeichenfolge festgelegt wird, rufen Sie die Methode requireEnvVars wie folgt auf:
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)
.build();
Von Bedeutung
Die requireEnvVars Methode ist in azure-identity Paketversionen 1.18.0 und höher verfügbar.
Um einen benutzerdefinierten Umgebungsvariablennamen anstelle des Standardnamens AZURE_TOKEN_CREDENTIALS zu verwenden, nutzen Sie AzureIdentityEnvVars.fromString(), um einen Verweis auf Ihre benutzerdefinierte Variable zu erstellen:
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.requireEnvVars(AzureIdentityEnvVars.fromString("MY_CUSTOM_TOKEN_CREDENTIALS"))
.build();
Hinweis
Die requireEnvVars Methode löst ein IllegalStateException , wenn die angegebenen Umgebungsvariablen nicht festgelegt oder leer sind.
Verwenden einer bestimmten Anmeldeinformation
Um alle Anmeldeinformationen außer einem auszuschließen, legen Sie die Umgebungsvariable AZURE_TOKEN_CREDENTIALS auf den Anmeldeinformationsnamen fest. Sie können beispielsweise die DefaultAzureCredential-Kette auf AzureCliCredential reduzieren, indem Sie AZURE_TOKEN_CREDENTIALS auf AzureCliCredential setzen. Der Zeichenfolgenvergleich wird unabhängig von der Groß- und Kleinschreibung durchgeführt. Gültige Zeichenfolgenwerte für die Umgebungsvariable sind:
AzureCliCredentialAzureDeveloperCliCredentialAzurePowerShellCredentialEnvironmentCredentialIntelliJCredentialManagedIdentityCredentialVisualStudioCodeCredentialWorkloadIdentityCredential
Von Bedeutung
Die AZURE_TOKEN_CREDENTIALS Umgebungsvariable unterstützt einzelne Anmeldeinformationsnamen in azure-identity Paketversionen 1.17.0 und höher.
Um sicherzustellen, dass die Umgebungsvariable definiert und auf eine unterstützte Zeichenfolge festgelegt wird, rufen Sie die Methode requireEnvVars wie folgt auf:
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)
.build();
Übersicht über ChainedTokenCredential
ChainedTokenCredential ist eine leere Verknüpfung, der Sie Anmeldedaten hinzufügen, die zu den Anforderungen Ihrer App passen. Zum Beispiel:
import com.azure.identity.AzureCliCredential;
import com.azure.identity.AzureCliCredentialBuilder;
import com.azure.identity.ChainedTokenCredential;
import com.azure.identity.ChainedTokenCredentialBuilder;
import com.azure.identity.IntelliJCredential;
import com.azure.identity.IntelliJCredentialBuilder;
// Code omitted for brevity
AzureCliCredential cliCredential = new AzureCliCredentialBuilder()
.build();
IntelliJCredential ijCredential = new IntelliJCredentialBuilder()
.build();
ChainedTokenCredential credential = new ChainedTokenCredentialBuilder()
.addLast(cliCredential)
.addLast(ijCredential)
.build();
Im vorherigen Codebeispiel wird eine maßgeschneiderte Zugangsdatenkette erstellt, die aus zwei Entwicklungszugangsdaten besteht.
AzureCliCredential wird zuerst versucht, gefolgt von IntelliJCredential, falls erforderlich. In grafischer Form sieht die Kette wie folgt aus:
Tipp
Um die Leistung zu verbessern, optimieren Sie die Sortierung von Anmeldeinformationen in ChainedTokenCredential von den meisten bis zu den am wenigsten verwendeten Anmeldeinformationen.
Verwendungsleitfaden für DefaultAzureCredential
DefaultAzureCredential ist zweifellos die einfachste Möglichkeit, mit der Azure Identitätsbibliothek zu beginnen, aber mit diesem Komfort kommt ein Kompromiss. Nachdem Sie Ihre App für Azure bereitgestellt haben, sollten Sie die Authentifizierungsanforderungen der App verstehen und überlegen, ob DefaultAzureCredential für Ihr Szenario geeignet ist.
DefaultAzureCredential bietet einen wichtigen Vorteil: Sie entkoppelt Ihren Anwendungscode von bestimmten Authentifizierungsmechanismen, sodass Sie Ihre Authentifizierungskonfiguration ändern können, ohne Code zu ändern. Für erfahrene Entwickler, die bewusst ihre Produktionsauthentifizierung konfigurieren, kann diese Flexibilität wertvoll sein. Diese Flexibilität hat jedoch potenzielle Nachteile:
- Debugging-Herausforderungen: Wenn die Authentifizierung fehlschlägt, kann es schwierig sein, die beleidigenden Anmeldeinformationen zu debuggen und zu identifizieren. Sie müssen die Protokollierung aktivieren, um den Fortschritt von einer Anmeldeinformation zum nächsten sowie den Status „Erfolg/Fehler“ der einzelnen Anmeldeinformationen anzuzeigen. Weitere Informationen finden Sie unter Debuggen einer verketteten Anmeldeinformationen.
- Leistungsaufwand: Der Prozess des sequenziellen Ausprobierens mehrerer Anmeldeinformationen kann leistungseinbußen verursachen. Wenn sie beispielsweise auf einem lokalen Entwicklungscomputer ausgeführt wird, ist die verwaltete Identität nicht verfügbar. Folglich schlägt
ManagedIdentityCredentialin der lokalen Entwicklungsumgebung immer fehl. -
Unvorstellbares Verhalten:
DefaultAzureCredentialüberprüft das Vorhandensein bestimmter environment-Variablen. Es ist möglich, dass jemand diese Umgebungsvariablen auf der Systemebene auf dem Hostcomputer hinzufügen oder ändern kann. Diese Änderungen gelten global und ändern daher das Verhalten vonDefaultAzureCredentialzur Laufzeit in jeder App, die auf diesem Computer ausgeführt wird. -
Berechtigungskonflikt:
DefaultAzureCredentialStoppt bei den ersten Anmeldeinformationen, die erfolgreich ein Token abrufen, unabhängig davon, ob diese Anmeldeinformationen über die richtigen Berechtigungen verfügen. Beispielsweise verfügen lokale Entwicklungszugangsdaten möglicherweise über umfassendere Berechtigungen als das in der Produktion verwaltete Identitätsmanagement, was dazu führt, dass die App lokal funktioniert, aber nach der Bereitstellung bei Autorisierungsprüfungen fehlschlägt.
Debuggen von verketteten Anmeldeinformationen
Um ein unerwartetes Problem zu diagnostizieren oder zu verstehen, was eine verkettete Anmeldeinformation tut, aktivieren Sie die Anmeldung in Ihrer App.
Nehmen Sie zur Veranschaulichung an, dass die parameterlose Form von DefaultAzureCredential verwendet wird, um eine Anforderung an ein Blob Storage Konto zu authentifizieren. Die App wird in der lokalen Entwicklungsumgebung ausgeführt, und der Entwickler hat sich mithilfe der Azure CLI bei Azure authentifiziert. Wenn die App ausgeführt wird, werden die folgenden relevanten Einträge in der Ausgabe angezeigt:
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential EnvironmentCredential is unavailable.
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential WorkloadIdentityCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] WARN com.microsoft.aad.msal4j.ConfidentialClientApplication - [Correlation ID: aaaa0000-bb11-2222-33cc-444444dddddd] Execution of class com.microsoft.aad.msal4j.AcquireTokenByClientCredentialSupplier failed: java.util.concurrent.ExecutionException: com.azure.identity.CredentialUnavailableException: ManagedIdentityCredential authentication unavailable. Connection to IMDS endpoint cannot be established.
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential ManagedIdentityCredential is unavailable.
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential IntelliJCredential is unavailable.
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential VisualStudioCodeCredential is unavailable.
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential AzureCliCredential returns a token
In der vorangegangenen Ausgabe beachten Sie, dass:
-
EnvironmentCredential,WorkloadIdentityCredential,ManagedIdentityCredential,IntelliJCredentialundVisualStudioCodeCredentialkonnten in dieser Reihenfolge kein Microsoft Entra Zugriffstoken abrufen. - Der Aufruf von
AzureCliCredential.getTokenist erfolgreich, wie durch den Eintrag mit dem Suffixreturns a tokenangegeben. DaAzureCliCredentialerfolgreich war, wurden keine Anmeldeinformationen darüber hinaus versucht.