Authentifizierungsmethoden im Azure SDK für GoAuthentication methods in the Azure SDK for Go

Das Azure SDK für Go bietet mehrere Möglichkeiten für die Authentifizierung über Azure.The Azure SDK for Go offers multiple ways to authenticate with Azure. Diese Authentifizierungsarten können mit verschiedenen Authentifizierungsmethoden aufgerufen werden.These authentication types are invoked through different authentication methods. Dieser Artikel behandelt die verfügbaren Typen und Methoden und unterstützt Sie bei der Wahl der optimalen Typen und Methoden für Ihre Anwendung.This article covers the available types, methods, and how to choose which are best for your application.

Verfügbare Authentifizierungsarten und -methodenAvailable authentication types and methods

Das Azure SDK für Go bietet verschiedene Authentifizierungsarten mit unterschiedlichen Anmeldeinformationen.The Azure SDK for Go offers several different types of authentication, using different credentials sets. Alle Authentifizierungsarten können jeweils über verschiedene Authentifizierungsmethoden verwendet werden, die dazu dienen, die Anmeldeinformationen als Eingabe an das SDK zu übergeben.Each authentication type is available through different authentication methods, which are how the SDK takes these credentials as input. Die folgende Tabelle enthält Informationen zu den verfügbaren Authentifizierungsarten sowie Verwendungsempfehlungen:The following table describes the available types of authentication and situations in which they're recommended for use by your application.

AuthentifizierungsartAuthentication type VerwendungsempfehlungRecommended when...
Zertifikatbasierte AuthentifizierungCertificate-based authentication Sie verfügen über ein X.509-Zertifikat, das für einen AAD-Benutzer oder -Dienstprinzipal (Azure Active Directory) konfiguriert wurde.You have an X509 certificate that was configured for an Azure Active Directory (AAD) user or service principal. Weitere Informationen finden Sie unter Erste Schritte mit zertifikatbasierter Authentifizierung in Azure Active Directory.To learn more, see Get started with certificate-based authentication in Azure Active Directory.
Client credentials (Clientanmeldeinformationen)Client credentials Sie verfügen über einen konfigurierten Dienstprinzipal, der für diese Anwendung oder für eine Klasse von Anwendungen konfiguriert ist, der sie angehört.You have a configured service principal that is set up for this application or a class of applications it belongs to. Weitere Informationen finden Sie unter Erstellen eines Dienstprinzipals über die Azure CLI.To learn more, see Create a service principal with Azure CLI.
Verwaltete Identitäten für Azure-RessourcenManaged identities for Azure resources Ihre Anwendung wird auf einer Azure-Ressource ausgeführt, die mit einer verwalteten Identität konfiguriert wurde.Your application is running on an Azure resource that has been configured with a managed identity. Weitere Informationen finden Sie unter Verwaltete Identitäten für Azure-Ressourcen (Worum handelt es sich bei verwalteten Identitäten für Azure-Ressourcen?).To learn more, see Managed identities for Azure resources.
GerätetokenDevice token Ihre Anwendung ist nur für die interaktive Verwendung vorgesehen.Your application is meant to be used interactively only. Benutzer haben unter Umständen die mehrstufige Authentifizierung aktiviert.Users may have multi-factor authentication enabled. Benutzer können sich über einen Webbrowser anmelden.Users have access to a web browser to sign in. Weitere Informationen finden Sie unter Verwenden der Gerätetokenauthentifizierung.For more information, see Use device token authentication.
Benutzername/KennwortUsername/password Sie verfügen über eine interaktive Anwendung, die keine andere Authentifizierungsmethode verwenden kann.You have an interactive application that can't use any other authentication method. Für Ihre Benutzer ist die mehrstufige Authentifizierung für die AAD-Anmeldung nicht aktiviert.Your users don't have multi-factor authentication enabled for their AAD sign-in.

Wichtig

Wenn Sie als Authentifizierungsart keine Clientanmeldeinformationen verwenden, muss Ihre Anwendung in Azure Active Directory registriert werden.If you use an authentication type other than client credentials, your application must be registered in Azure Active Directory. Eine entsprechende Anleitung finden Sie unter Integrieren von Anwendungen in Azure Active Directory.To learn how, see Integrating applications with Azure Active Directory.

Hinweis

Verwenden Sie die Authentifizierung mit Benutzername/Kennwort nur, wenn dies zur Erfüllung besonderer Anforderungen erforderlich ist.Unless you have special requirements, avoid username/password authentication. In Situationen, in denen eine benutzerbasierte Anmeldung geeignet ist, kann in der Regel auch die Gerätetokenauthentifizierung verwendet werden.In situations where user-based sign in is appropriate, device token authentication can usually be used instead.

Diese Authentifizierungsarten können mit verschiedenen Methoden verwendet werden.These authentication types are available through different methods.

Alle Authentifizierungsfunktionen und -arten stehen im Paket github.com/Azure/go-autorest/autorest/azure/auth zur Verfügung.All authentication functions and types are available in the github.com/Azure/go-autorest/autorest/azure/auth package.

Hinweis

Verwenden Sie die clientbasierte Authentifizierung nur, wenn dies zur Erfüllung besonderer Anforderungen erforderlich ist.Unless you have special requirements, avoid client-based authentication. Diese Authentifizierungsmethode verleitet zu nicht empfehlenswerten Vorgehensweisen.This method of authentication encourages bad practices. Dazu zählt in erster Linie die Verwendung hartcodierter Anmeldeinformationen.In particular, using client-based authentication makes it tempting to hard-code credentials. Bei benutzerdefiniertem Code für die Authentifizierung besteht die Gefahr, dass er in späteren SDK-Versionen nicht mehr funktioniert, falls sich die Authentifizierungsanforderungen ändern.Writing custom code for authentication may also break under future SDK releases if authentication requirements change.

Verwenden der umgebungsbasierten AuthentifizierungUse environment-based authentication

Wenn Sie Ihre Anwendung in einer kontrollierten Umgebung ausführen, ist die umgebungsbasierte Authentifizierung eine naheliegende Option.If you're running your application in a controlled setting, environment-based authentication is a natural choice. Bei dieser Authentifizierungsmethode konfigurieren Sie die Shell-Umgebung vor dem Ausführen Ihrer Anwendung.With this authentication method, you configure the shell environment before running your application. Zur Laufzeit liest das Go SDK diese Umgebungsvariablen für die Authentifizierung bei Azure.At runtime, the Go SDK reads these environment variables to authenticate with Azure.

Die umgebungsbasierte Authentifizierung unterstützt alle Authentifizierungsmethoden (mit Ausnahme von Gerätetoken). Die Auswertung erfolgt in der folgenden Reihenfolge:Environment-based authentication has support for all authentication methods except device tokens, evaluated in the following order:

  • Client credentials (Clientanmeldeinformationen)Client credentials
  • X509-ZertifikateX509 certificates
  • Benutzername/KennwortUsername/password
  • Verwaltete Identitäten für Azure-RessourcenManaged identities for Azure resources

Sind für einen Authentifizierungstyp keine Werte festgelegt oder wird der Authentifizierungstyp verweigert, probiert das SDK automatisch den nächsten Authentifizierungstyp aus.If an authentication type has unset values or is refused, the SDK automatically tries the next authentication type. Wenn keine weitere Typen mehr übrig sind, gibt das SDK einen Fehler zurück.When no more types are available to try, the SDK returns an error.

Die folgende Tabelle gibt Aufschluss über die Umgebungsvariablen, die für die einzelnen Authentifizierungsarten festgelegt werden müssen, die von der umgebungsbasierten Authentifizierung unterstützt werden.The following table details the environment variables that need to be set for each authentication type supported by environment-based authentication.

AuthentifizierungsartAuthentication type UmgebungsvariableEnvironment variable BESCHREIBUNGDescription
ClientanmeldeinformationenClient credentials AZURE_TENANT_ID Die ID für den Active Directory-Mandanten, zu dem der Dienstprinzipal gehört.The ID for the Active Directory tenant that the service principal belongs to.
AZURE_CLIENT_ID Der Name oder die ID des Dienstprinzipals.The name or ID of the service principal.
AZURE_CLIENT_SECRET Das dem Dienstprinzipal zugeordnete GeheimnisThe secret associated with the service principal.
CertificateCertificate AZURE_TENANT_ID Die ID für den Active Directory-Mandanten, bei dem das Zertifikat registriert ist.The ID for the Active Directory tenant that the certificate is registered with.
AZURE_CLIENT_ID Die dem Zertifikat zugeordnete Anwendungsclient-ID.The application client ID associated with the certificate.
AZURE_CERTIFICATE_PATH Der Pfad der Clientzertifikatdatei.The path to the client certificate file.
AZURE_CERTIFICATE_PASSWORD Das Kennwort für das Clientzertifikat.The password for the client certificate.
Benutzername/KennwortUsername/Password AZURE_TENANT_ID Die ID für den Active Directory-Mandanten, zu dem der Benutzer gehört.The ID for the Active Directory tenant that the user belongs to.
AZURE_CLIENT_ID Die Anwendungsclient-ID.The application client ID.
AZURE_USERNAME Der Benutzername für die Anmeldung.The username to sign in with.
AZURE_PASSWORD Das Kennwort für die Anmeldung.The password to sign in with.
Verwaltete IdentitätManaged identity Für die Authentifizierung der verwalteten Identität sind keine Anmeldeinformationen erforderlich.No credentials are needed for managed identity authentication. Die Anwendung muss auf einer Azure-Ressource ausgeführt werden, die für die Verwendung von verwalteten Identitäten konfiguriert ist.The application must be running on an Azure resource configured to use managed identities. Ausführliche Informationen finden Sie unter Verwaltete Identitäten für Azure-Ressourcen (Worum handelt es sich bei verwalteten Identitäten für Azure-Ressourcen?).For details, see Managed identities for Azure resources.

Wenn Sie eine Verbindung mit einem Cloud- oder Verwaltungsendpunkt herstellen möchten, bei dem es sich nicht um die standardmäßige öffentliche Azure-Cloud handelt, legen Sie die folgenden Umgebungsvariablen fest.To connect to a cloud or management endpoint other than the default Azure public cloud, set the following environment variables. Diese werden häufig bei Verwendung von Azure Stack, bei Verwendung einer Cloud in einer anderen geografischen Region oder bei Verwendung des klassischen Bereitstellungsmodells festgelegt.The most common reasons are if you use Azure Stack, a cloud in a different geographic region, or the classic deployment model.

UmgebungsvariableEnvironment variable BESCHREIBUNGDescription
AZURE_ENVIRONMENT Der Name der Cloudumgebung, mit der eine Verbindung hergestellt werden soll.The name of the cloud environment to connect to.
AZURE_AD_RESOURCE Die Active Directory-Ressourcen-ID, die beim Herstellen einer Verbindung mit dem Verwaltungsendpunkt als URI verwendet wirdThe Active Directory resource ID to use when connecting, as a URI to your management endpoint.

Rufen Sie bei Verwendung der umgebungsbasierten Authentifizierung die Funktion NewAuthorizerFromEnvironment auf, um Ihr Authorizer-Objekt abzurufen.When using environment-based authentication, call the NewAuthorizerFromEnvironment function to get your authorizer object. Dieses Objekt wird dann für die Eigenschaft Authorizer von Clients festgelegt, um ihnen den Zugriff auf Azure zu ermöglichen.This object is then set on the Authorizer property of clients to allow them access to Azure.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := auth.NewAuthorizerFromEnvironment()

Authentifizierung in Azure StackAuthentication on Azure Stack

Für die Authentifizierung in Azure Stack müssen Sie die folgenden Variablen festlegen:To authenticate on Azure Stack, you need to set the following variables:

UmgebungsvariableEnvironment variable BESCHREIBUNGDescription
AZURE_AD_ENDPOINT Active Directory-EndpunktThe Active Directory endpoint.
AZURE_AD_RESOURCE Active Directory-Ressourcen-IDThe Active Directory resource ID.

Diese Variablen können aus den Azure Stack-Metadateninformationen abgerufen werden.These variables can be retrieved from Azure Stack metadata information. Öffnen Sie zum Abrufen der Metadaten einen Webbrowser in Ihrer Azure Stack-Umgebung, und geben Sie die folgende URL ein: (ResourceManagerURL)/metadata/endpoints?api-version=1.0.To retrieve the metadata, open a web browser in your Azure Stack environment and use the url: (ResourceManagerURL)/metadata/endpoints?api-version=1.0

ResourceManagerURL variiert basierend auf dem Regionsnamen, dem Computernamen und dem externen vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) der Azure Stack-Bereitstellung:The ResourceManagerURL varies based on the region name, machine name, and external fully qualified domain name (FQDN) of your Azure Stack deployment:

EnvironmentEnvironment ResourceManagerURLResourceManagerURL
Development KitDevelopment Kit https://management.local.azurestack.external/
Integrierte SystemeIntegrated Systems https://management.(region).ext-(machine-name).(FQDN)

Weitere Informationen zur Verwendung des Azure SDK für Go in Azure Stack finden Sie unter Verwenden von API-Versionsprofilen mit Go in Azure Stack.For more information on how to use the Azure SDK for Go on Azure Stack, see Use API version profiles with Go in Azure Stack

Verwenden der dateibasierten AuthentifizierungUse file-based authentication

Bei der dateibasierten Authentifizierung wird ein von der Azure CLI generiertes Dateiformat verwendet.File-based authentication uses a file format generated by the Azure CLI. Diese Datei können Sie im Rahmen der Erstellung eines neuen Dienstprinzipals ganz einfach mit dem Parameter --sdk-auth erstellen.You can easily create this file when creating a new service principal with the --sdk-auth parameter. Wenn Sie die dateibasierte Authentifizierung verwenden möchten, achten Sie darauf, dass dieses Argument bei der Dienstprinzipalerstellung angegeben ist.If you plan on using file-based authentication, make sure that this argument is provided when creating a service principal. Da die CLI-Ausgabe in stdout erfolgt, leiten Sie die Ausgabe in eine Datei um.Since the CLI prints output to stdout, redirect output to a file.

az ad sp create-for-rbac --sdk-auth > azure.auth

Legen Sie die Umgebungsvariable AZURE_AUTH_LOCATION auf den Speicherort der Autorisierungsdatei fest.Set the AZURE_AUTH_LOCATION environment variable to where the authorization file is located. Diese Umgebungsvariable wird von der Anwendung gelesen, und die darin enthaltenen Anmeldeinformationen werden analysiert.This environment variable is read by the application, and the credentials within it are parsed. Wenn Sie die Autorisierungsdatei zur Laufzeit auswählen müssen, bearbeiten Sie die Programmumgebung mithilfe der Funktion os.Setenv.If you need to select the authorization file at runtime, manipulate the program's environment using the os.Setenv function.

Rufen Sie zum Laden der Authentifizierungsinformationen die Funktion NewAuthorizerFromFile auf.To load the authentication information, call the NewAuthorizerFromFile function. Im Gegensatz zur umgebungsbasierten Autorisierung benötigt die dateibasierte Autorisierung einen Ressourcenendpunkt.Unlike environment-based authorization, file-based authorization requires a resource endpoint.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := NewAuthorizerFromFile(azure.PublicCloud.ResourceManagerEndpoint)

Weitere Informationen zur Verwendung von Dienstprinzipalen sowie zur Verwaltung ihrer Zugriffsberechtigungen finden Sie unter Erstellen eines Dienstprinzipals über die Azure CLI.For more on using service principals and managing their access permissions, see Create a service principal with Azure CLI.

Verwenden der GerätetokenauthentifizierungUse device token authentication

Wenn sich Benutzer interaktiv anmelden sollen, empfiehlt sich die Verwendung der Gerätetokenauthentifizierung.If you want users to sign in interactively, the best way is through device token authentication. Bei diesem Authentifizierungsablauf wird ein Token an den Benutzer übergeben, das dieser auf einer Anmeldewebsite von Microsoft einfügt, auf der er sich bei einem AAD-Konto (Azure Active Directory) authentifiziert.This authentication flow passes the user a token to paste into a Microsoft sign-in site, where they then authenticate with an Azure Active Directory (AAD) account. Im Gegensatz zur Standardauthentifizierung mit Benutzername/Kennwort unterstützt diese Authentifizierungsmethode Konten mit aktivierter mehrstufiger Authentifizierung.This authentication method supports accounts that have multi-factor authentication enabled, unlike standard username/password authentication.

Erstellen Sie zur Verwendung der Gerätetokenauthentifizierung mithilfe der Funktion NewDeviceFlowConfig ein Authorizer-Objekt vom Typ DeviceFlowConfig.To use device token authentication, create a DeviceFlowConfig authorizer with the NewDeviceFlowConfig function. Rufen Sie Authorizer für das resultierende Objekt auf, um den Authentifizierungsprozess zu starten.Call Authorizer on the resulting object to start the authentication process. Die Geräteauthentifizierung blockiert die Programmausführung, bis der gesamte Authentifizierungsablauf abgeschlossen ist.Device flow authentication blocks program execution until the whole authentication flow is complete.

import "github.com/Azure/go-autorest/autorest/azure/auth"
deviceConfig := auth.NewDeviceFlowConfig(applicationID, tenantID)
authorizer, err := deviceConfig.Authorizer()

Verwenden eines AuthentifizierungsclientsUse an authentication client

Wenn Sie eine bestimmte Art von Authentifizierung benötigen und das Laden der Authentifizierungsinformationen des Benutzers Ihrem Programm überlassen möchten, können Sie einen beliebigen Client verwenden, der mit der Schnittstelle auth.AuthorizerConfig kompatibel ist.If you require a specific type of authentication and are willing to have your program do the work to load authentication information from the user, you can use any client that conforms to the auth.AuthorizerConfig interface. Verwenden Sie einen Typ, der diese Schnittstelle in den folgenden Fällen implementiert:Use a type that implements this interface when you:

  • Schreiben eines interaktiven ProgrammsWrite an interactive program
  • Verwenden spezieller KonfigurationsdateienUse specialized configuration files
  • Anforderung, die die Verwendung einer integrierten Authentifizierungsmethode verhindertHave a requirement that prevents using a built-in authentication method

Warnung

Verwenden Sie in einer Anwendung niemals hartcodierte Azure-Anmeldeinformationen.Never hard-code Azure credentials into an application. In der Binärdatei einer Anwendung enthaltene Geheimnisse können von Angreifern leichter extrahiert werden. Dabei spielt es keine Rolle, ob die Anwendung ausgeführt wird oder nicht.Putting secrets into an application binary makes it easier for an attacker to extract them, whether the application is running or not. Dies gefährdet alle Azure-Ressourcen, für die die Anmeldeinformationen autorisiert sind.This puts all Azure resources the credentials are authorized for at risk!

Die folgende Tabelle enthält die mit der Schnittstelle AuthorizerConfig kompatiblen Arten aus dem SDK.The following table lists the types in the SDK that conform to the AuthorizerConfig interface.

AuthentifizierungsartAuthentication type Authorizer-TypAuthorizer type
Zertifikatbasierte AuthentifizierungCertificate-based authentication ClientCertificateConfigClientCertificateConfig
Client credentials (Clientanmeldeinformationen)Client credentials ClientCredentialsConfigClientCredentialsConfig
Verwaltete Identitäten für Azure-RessourcenManaged identities for Azure resources MSIConfigMSIConfig
Benutzername/KennwortUsername/password UsernamePasswordConfigUsernamePasswordConfig

Erstellen Sie einen Authentifikator mit der entsprechenden New-Funktion, und rufen Sie dann Authorize für das resultierende Objekt auf, um die Authentifizierung durchzuführen.Create an authenticator with its associated New function, and then call Authorize on the resulting object to authenticate. Beispiel für die zertifikatbasierte Authentifizierung:For example, to use certificate-based authentication:

import "github.com/Azure/go-autorest/autorest/azure/auth"
certificateAuthorizer := auth.NewClientCertificateConfig(certificatePath, certificatePassword, clientID, tenantID)
authorizerToken, err := certificateAuthorizer.Authorize()