Authentifizierung und Autorisierung in Azure App Service und Azure FunctionsAuthentication and authorization in Azure App Service and Azure Functions

Azure App Service bietet integrierte Authentifizierungs- und Autorisierungsunterstützung, sodass Sie für das Anmelden von Benutzern und den Zugriff auf Daten nur wenig oder keinen Code in Ihrer Web-App, RESTful-API und dem mobilen Back-End sowie in Azure Functions schreiben müssen.Azure App Service provides built-in authentication and authorization support, so you can sign in users and access data by writing minimal or no code in your web app, RESTful API, and mobile back end, and also Azure Functions. In diesem Artikel wird beschrieben, wie App Service zur Vereinfachung der Authentifizierung und Autorisierung für Ihre App beiträgt.This article describes how App Service helps simplify authentication and authorization for your app.

Eine sichere Authentifizierung und Autorisierung erfordert umfassende Sicherheitskenntnisse, u.a. zu Verbund, Verschlüsselung, Verwaltung von JSON-Webtoken (JWT) und Gewährungstypen.Secure authentication and authorization require deep understanding of security, including federation, encryption, JSON web tokens (JWT) management, grant types, and so on. App Service bietet diese Hilfsprogramme, damit Sie mehr Zeit und Energie für das Bereitstellen von geschäftlichem Nutzen für Ihre Kunden aufwenden können.App Service provides these utilities so that you can spend more time and energy on providing business value to your customer.

Wichtig

Die Nutzung dieser Funktion für die Authentifizierung und Autorisierung ist nicht verpflichtend.You're not required to use this feature for authentication and authorization. Sie können die gebündelten Sicherheitsfeatures im Webframework Ihrer Wahl verwenden oder eigene Hilfsprogramme schreiben.You can use the bundled security features in your web framework of choice, or you can write your own utilities. Beachten Sie jedoch, dass Chrome 80 Breaking Changes an der SameSite-Implementierung für Cookies vornimmt, die voraussichtlich im März 2020 veröffentlicht werden, und die benutzerdefinierte Remoteauthentifizierung sowie andere Szenarien mit websiteübergreifender Cookiebereitstellung nach der Aktualisierung von Chrome-Clientbrowsern möglicherweise nicht mehr funktionieren.However, keep in mind that Chrome 80 is making breaking changes to its implementation of SameSite for cookies (release date around March 2020), and custom remote authentication or other scenarios that rely on cross-site cookie posting may break when client Chrome browsers are updated. Die Problemumgehung ist komplex, da unterschiedliche SameSite-Verhaltensweisen für verschiedene Browser unterstützt werden müssen.The workaround is complex because it needs to support different SameSite behaviors for different browsers.

Die von App Service gehosteten ASP.NET Core-Versionen ab 2.1 wurden bereits für diesen Breaking Change gepatcht und behandeln Chrome 80 sowie ältere Browser entsprechend.The ASP.NET Core 2.1 and above versions hosted by App Service are already patched for this breaking change and handle Chrome 80 and older browsers appropriately. Im Januar 2020 wurde der gleiche Patch für ASP.NET Framework 4.7.2 außerdem in den App Service-Instanzen bereitgestellt.In addition, the same patch for ASP.NET Framework 4.7.2 has been deployed on the App Service instances throughout January 2020. Weitere Informationen finden Sie unter Azure App Service: Update für SameSite-Cookies.For more information, see Azure App Service SameSite cookie update.

Hinweis

Das Authentifizierungs-/Autorisierungsfeature wird manchmal auch als „Einfache Autorisierung“ bezeichnet.The Authentication/Authorization feature is also sometimes referred to as "Easy Auth".

Hinweis

Durch Aktivieren dieser Funktion werden alle nicht sicheren HTTP-Anforderungen an Ihre Anwendung automatisch an HTTPS umgeleitet, unabhängig von der App Service-Konfigurationseinstellung zum Erzwingen von HTTPS.Enabling this feature will cause all non-secure HTTP requests to your application to be automatically redirected to HTTPS, regardless of the App Service configuration setting to enforce HTTPS. Bei Bedarf können Sie dies über die Einstellung requireHttps in der Konfigurationsdatei für die Authentifizierungseinstellungen deaktivieren, Sie müssen dann jedoch sicherstellen, dass niemals Sicherheitstoken über unsichere HTTP-Verbindungen übertragen werden.If needed, you can disable this via the requireHttps setting in the auth settings configuration file, but you must then take care to ensure no security tokens ever get transmitted over non-secure HTTP connections.

Spezielle Informationen zu nativen mobilen Apps finden Sie unter Authentifizierung und Autorisierung in Azure Mobile Apps.For information specific to native mobile apps, see User authentication and authorization for mobile apps with Azure App Service.

FunktionsweiseHow it works

Unter WindowsOn Windows

Das Modul für Authentifizierung und Autorisierung wird in der gleichen Sandbox wie Ihr Anwendungscode ausgeführt.The authentication and authorization module runs in the same sandbox as your application code. Wenn es aktiviert ist, wird es von allen eingehenden HTTP-Anforderungen durchlaufen, bevor diese von Ihrem Anwendungscode behandelt werden.When it's enabled, every incoming HTTP request passes through it before being handled by your application code.

Ein Architekturdiagramm, das zeigt, wie Anforderungen durch einen Prozess in der Website-Sandbox abgefangen werden, der mit Identitätsanbietern interagiert, bevor Datenverkehr an die bereitgestellte Website zugelassen wird

Dieses Modul erledigt einige Dinge für Ihre App:This module handles several things for your app:

  • Authentifizierung von Benutzern mit dem angegebenen AnbieterAuthenticates users with the specified provider
  • Überprüfung, Speicherung und Aktualisierung von TokenValidates, stores, and refreshes tokens
  • Verwaltung der authentifizierten SitzungManages the authenticated session
  • Einfügen von Identitätsinformationen in AnforderungsheaderInjects identity information into request headers

Das Modul wird getrennt vom Anwendungscode ausgeführt und mithilfe von App-Einstellungen konfiguriert.The module runs separately from your application code and is configured using app settings. Weder SDKs noch bestimmte Sprachen oder Änderungen am Anwendungscode sind erforderlich.No SDKs, specific languages, or changes to your application code are required.

Informationen zu ContainernOn Containers

Das Modul für Authentifizierung und Autorisierung wird in einem separaten Container isoliert von Ihrem Anwendungscode ausgeführt.The authentication and authorization module runs in a separate container, isolated from your application code. Über das sogenannte Botschaftermuster interagiert es mit dem eingehenden Datenverkehr, um ähnliche Funktionen wie unter Windows auszuführen.Using what's known as the Ambassador pattern, it interacts with the incoming traffic to perform similar functionality as on Windows. Da es nicht in einem Prozess ausgeführt wird, ist keine direkte Integration in bestimmte Sprachframeworks möglich. Die relevanten Informationen für Ihre App werden jedoch wie unten erläutert mithilfe von Anforderungsheadern weitergeleitet.Because it does not run in-process, no direct integration with specific language frameworks is possible; however, the relevant information that your app needs is passed through using request headers as explained below.

Benutzer-/AnwendungsansprücheUser/Application claims

App Service stellt Ihrem Code für alle Sprachenframeworks die Ansprüche im eingehenden Token (ob dieses von einem authentifizierten Endbenutzer oder einer Clientanwendung stammt) zur Verfügung, indem sie in die Anforderungsheader eingefügt werden.For all language frameworks, App Service makes the claims in the incoming token (whether that be from an authenticated end user or a client application) available to your code by injecting them into the request headers. Für ASP.NET 4.6-Apps füllt App Service die ClaimsPrincipal.Current-Eigenschaft mit Ansprüchen des authentifizierten Benutzers, sodass Sie dem standardmäßigen .NET Codemuster einschließlich des [Authorize]-Attributs folgen können.For ASP.NET 4.6 apps, App Service populates ClaimsPrincipal.Current with the authenticated user's claims, so you can follow the standard .NET code pattern, including the [Authorize] attribute. Auf ähnliche Weise füllt App Service die _SERVER['REMOTE_USER']-Variable für PHP-Apps.Similarly, for PHP apps, App Service populates the _SERVER['REMOTE_USER'] variable. Für Java-Apps sind die Ansprüche über das Tomcat-Servlet zugänglich.For Java apps, the claims are accessible from the Tomcat servlet.

Für Azure Functions wird ClaimsPrincipal.Current nicht für .NET Code aufgefüllt, Sie können die Benutzeransprüche jedoch weiterhin in den Anforderungsheadern finden oder das ClaimsPrincipal-Objekt aus dem Anforderungskontext oder selbst durch einen Bindungsparameter abrufen.For Azure Functions, ClaimsPrincipal.Current is not populated for .NET code, but you can still find the user claims in the request headers, or get the ClaimsPrincipal object from the request context or even through a binding parameter. Weitere Informationen finden Sie unter Arbeiten mit Clientidentitäten.See working with client identities for more information.

Weitere Informationen finden Sie unter Zugriff auf Benutzeransprüche.For more information, see Access user claims.

Hinweis

Zu diesem Zeitpunkt unterstützt ASP.NET Core aktuell nicht das Auffüllen des aktuellen Benutzers mit der Authentifizierungs-/Autorisierungsfunktion.At this time, ASP.NET Core does not currently support populating the current user with the Authentication/Authorization feature. Allerdings gibt es Open-Source-Middlewarekomponenten von Drittanbietern, die diese Lücke füllen.However, some 3rd party, open source middleware components do exist to help fill this gap.

TokenspeicherToken store

App Service bietet einen integrierten Tokenspeicher. Dabei handelt es sich um ein Repository mit Token, die den Benutzern Ihrer Web-Apps, APIs oder nativen mobilen Apps zugeordnet sind.App Service provides a built-in token store, which is a repository of tokens that are associated with the users of your web apps, APIs, or native mobile apps. Wenn Sie die Authentifizierung für jeden Anbieter aktivieren, ist dieser Tokenspeicher sofort für Ihre App verfügbar.When you enable authentication with any provider, this token store is immediately available to your app. Wenn Ihr Anwendungscode im Auftrag des Benutzers auf Daten dieser Anbieter zugreifen muss, z.B um:If your application code needs to access data from these providers on the user's behalf, such as:

  • Beiträge in der Facebook-Chronik des authentifizierten Benutzers zu veröffentlichenpost to the authenticated user's Facebook timeline
  • Lesen der Unternehmensdaten des Benutzers mit der Microsoft Graph-APIread the user's corporate data using the Microsoft Graph API

In der Regel müssen Sie Code schreiben, um diese Token in Ihrer Anwendung zu erfassen, speichern und aktualisieren.You typically must write code to collect, store, and refresh these tokens in your application. Mit dem Tokenspeicher rufen Sie die Token bei Bedarf einfach ab und weisen App Service an, sie zu aktualisieren, wenn sie ungültig werden.With the token store, you just retrieve the tokens when you need them and tell App Service to refresh them when they become invalid.

Die ID-, Zugriffs- und Aktualisierungstoken werden für die authentifizierte Sitzung zwischengespeichert und sind nur für den zugehörigen Benutzer zugänglich.The ID tokens, access tokens, and refresh tokens are cached for the authenticated session, and they're accessible only by the associated user.

Wenn Sie in Ihrer App nicht mit Token arbeiten müssen, können Sie auf der Seite Authentifizierung/Autorisierung Ihrer App den Tokenspeicher deaktivieren.If you don't need to work with tokens in your app, you can disable the token store in your app's Authentication / Authorization page.

Protokollierung und NachverfolgungLogging and tracing

Wenn Sie die Anwendungsprotokollierung aktivieren, werden Ablaufverfolgungen für Authentifizierung und Autorisierung direkt in den Protokolldateien angezeigt.If you enable application logging, you will see authentication and authorization traces directly in your log files. Wenn ein unerwarteter Authentifizierungsfehler angezeigt wird, können Sie alle Details dazu problemlos in den vorhandenen Anwendungsprotokollen finden.If you see an authentication error that you didn't expect, you can conveniently find all the details by looking in your existing application logs. Wenn Sie die Ablaufverfolgung für Anforderungsfehler aktivieren, sehen Sie genau, welche Rolle das Modul für Authentifizierung und Autorisierung möglicherweise bei einer fehlgeschlagenen Anforderung gespielt hat.If you enable failed request tracing, you can see exactly what role the authentication and authorization module may have played in a failed request. Suchen Sie in den Ablaufverfolgungsprotokollen nach Verweisen auf ein Modul namens EasyAuthModule_32/64.In the trace logs, look for references to a module named EasyAuthModule_32/64.

IdentitätsanbieterIdentity providers

App Service nutzt die Verbundidentität. Dabei werden die Benutzeridentitäten und der Authentifizierungsablauf von einem externen Identitätsanbieter für Sie verwaltet.App Service uses federated identity, in which a third-party identity provider manages the user identities and authentication flow for you. Fünf Identitätsanbieter sind standardmäßig verfügbar:Five identity providers are available by default:

AnbieterProvider AnmeldungsendpunktSign-in endpoint
Azure Active DirectoryAzure Active Directory /.auth/login/aad
Microsoft-KontoMicrosoft Account /.auth/login/microsoftaccount
FacebookFacebook /.auth/login/facebook
GoogleGoogle /.auth/login/google
TwitterTwitter /.auth/login/twitter
Jeder OpenID Connect-Anbieter (Vorschau)Any OpenID Connect provider (preview) /.auth/login/<providerName>

Wenn Sie die Authentifizierung und Autorisierung mit einem dieser Anbieter aktivieren, ist der entsprechende Anmeldungsendpunkt für die Benutzerauthentifizierung und die Überprüfung von Authentifizierungstoken vom Anbieter verfügbar.When you enable authentication and authorization with one of these providers, its sign-in endpoint is available for user authentication and for validation of authentication tokens from the provider. Sie können Ihren Benutzern problemlos eine beliebige Anzahl von diesen Anmeldeoptionen bereitstellen.You can provide your users with any number of these sign-in options with ease.

Zur Integration in andere Identitätsanbieter oder eine benutzerdefinierte Authentifizierungslösung ist ein Pfad für die Legacyerweiterbarkeit vorhanden, dieser wird aber nicht empfohlen.A legacy extensibility path exists for integrating with other identity providers or a custom auth solution, but this is not recommended. Nutzen Sie stattdessen die OpenID Connect-Unterstützung.Instead, consider using the OpenID Connect support.

AuthentifizierungsflussAuthentication flow

Der Authentifizierungsablauf gilt für alle Anbieter, unterscheidet sich jedoch abhängig davon, ob die Anmeldung mit dem SDK des Anbieters erfolgen soll:The authentication flow is the same for all providers, but differs depending on whether you want to sign in with the provider's SDK:

  • Ohne Anbieter-SDK: Die Anwendung delegiert die Verbundanmeldung an App Service.Without provider SDK: The application delegates federated sign-in to App Service. Dies ist normalerweise bei Browser-Apps der Fall, die dem Benutzer die Anmeldeseite des Anbieters anzeigen können.This is typically the case with browser apps, which can present the provider's login page to the user. Der Servercode verwaltet den Anmeldevorgang, daher wird er auch als servergesteuerter Datenfluss oder Serverfluss bezeichnet.The server code manages the sign-in process, so it is also called server-directed flow or server flow. Dieser Fall gilt für Browser-Apps.This case applies to browser apps. Es gilt auch für native Apps, die Benutzer mithilfe des Client SDK von Mobile Apps anmelden, da das SDK eine Webansicht zum Anmelden von Benutzern mit der App Service-Authentifizierung öffnet.It also applies to native apps that sign users in using the Mobile Apps client SDK because the SDK opens a web view to sign users in with App Service authentication.
  • Mit Anbieter-SDK: Die Anwendung meldet den Benutzer manuell beim Anbieter an und sendet dann das Authentifizierungstoken zur Überprüfung an App Service.With provider SDK: The application signs users in to the provider manually and then submits the authentication token to App Service for validation. Dies ist normalerweise bei Apps ohne Browser der Fall, die dem Benutzer die Anmeldeseite des Anbieters nicht anzeigen können.This is typically the case with browser-less apps, which can't present the provider's sign-in page to the user. Der Anwendungscode verwaltet den Anmeldevorgang, daher wird er auch als clientgesteuerter Datenfluss oder Clientfluss bezeichnet.The application code manages the sign-in process, so it is also called client-directed flow or client flow. Dieser Fall gilt für REST-APIs Azure Functions und JavaScript-Browserclients sowie Browser-Apps, die eine höhere Flexibilität beim Anmeldevorgang erfordern.This case applies to REST APIs, Azure Functions, and JavaScript browser clients, as well as browser apps that need more flexibility in the sign-in process. Er gilt auch für native mobile Apps, die Benutzer mithilfe des Anbieter-SDKs anmelden.It also applies to native mobile apps that sign users in using the provider's SDK.

Hinweis

Bei Aufrufen aus einer vertrauenswürdigen Browser-App in App Service an eine weitere REST-API in App Service oder Azure Functions kann über den servergesteuerten Datenfluss authentifiziert werden.Calls from a trusted browser app in App Service to another REST API in App Service or Azure Functions can be authenticated using the server-directed flow. Weitere Informationen finden Sie unter Anpassen der Authentifizierung und Autorisierung in App Service.For more information, see Customize authentication and authorization in App Service.

Die folgende Tabelle zeigt die Schritte des Authentifizierungsablaufs.The table below shows the steps of the authentication flow.

SchrittStep Ohne Anbieter-SDKWithout provider SDK Mit Anbieter-SDKWith provider SDK
1. Anmeldung des Benutzers1. Sign user in Client wird zu /.auth/login/<provider> umgeleitet.Redirects client to /.auth/login/<provider>. Clientcode meldet Benutzer direkt mit dem Anbieter-SDK an und erhält ein Authentifizierungstoken.Client code signs user in directly with provider's SDK and receives an authentication token. Informationen finden Sie in der Dokumentation des Anbieters.For information, see the provider's documentation.
2. Nachauthentifizierung2. Post-authentication Anbieter leitet Client zu /.auth/login/<provider>/callback um.Provider redirects client to /.auth/login/<provider>/callback. Clientcode sendet Token des Anbieters zur Überprüfung an /.auth/login/<provider>.Client code posts token from provider to /.auth/login/<provider> for validation.
3. Einrichten der authentifizierten Sitzung3. Establish authenticated session App Service fügt der Antwort ein authentifiziertes Cookie hinzu.App Service adds authenticated cookie to response. App Service gibt das eigene Authentifizierungstoken an den Clientcode zurück.App Service returns its own authentication token to client code.
4. Bereitstellen von authentifiziertem Inhalt4. Serve authenticated content Client schließt Authentifizierungscookie in nachfolgenden Anforderungen (die automatisch vom Browser verarbeitet werden) ein.Client includes authentication cookie in subsequent requests (automatically handled by browser). Clientcode stellt Authentifizierungstoken im X-ZUMO-AUTH-Header (der automatisch von Mobile Apps-Client-SDKs verarbeitet wird) bereit.Client code presents authentication token in X-ZUMO-AUTH header (automatically handled by Mobile Apps client SDKs).

Für Clientbrowser kann App Service alle nicht authentifizierten Benutzer automatisch an /.auth/login/<provider> weiterleiten.For client browsers, App Service can automatically direct all unauthenticated users to /.auth/login/<provider>. Sie können Benutzern auch einen oder mehrere /.auth/login/<provider>-Links zur Anmeldung bei Ihrer App mit dem Anbieter ihrer Wahl bereitstellen.You can also present users with one or more /.auth/login/<provider> links to sign in to your app using their provider of choice.

AutorisierungsverhaltenAuthorization behavior

Im Azure-Portal können Sie die App Service-Autorisierung mit einer Reihe von Verhaltensweisen konfigurieren, wenn eine eingehende Anforderung nicht authentifiziert ist.In the Azure portal, you can configure App Service authorization with a number of behaviors when incoming request is not authenticated.

Screenshot des Dropdownmenüs „Die auszuführende Aktion, wenn die Anforderung nicht authentifiziert ist“

Die folgenden Überschriften beschreiben die Optionen.The following headings describe the options.

Anonyme Anforderungen zulassen (keine Aktion)Allow Anonymous requests (no action)

Diese Option verweist die Autorisierung von nicht authentifiziertem Datenverkehr an Ihren Anwendungscode.This option defers authorization of unauthenticated traffic to your application code. Für authentifizierte Anforderungen übergibt App Service auch Authentifizierungsinformationen in den HTTP-Headern.For authenticated requests, App Service also passes along authentication information in the HTTP headers.

Diese Option bietet mehr Flexibilität bei der Verarbeitung anonymer Anforderungen.This option provides more flexibility in handling anonymous requests. Beispielsweise können Sie für Ihre Benutzer mehrere Anmeldungsanbieter bereitstellen.For example, it lets you present multiple sign-in providers to your users. Sie müssen jedoch Code schreiben.However, you must write code.

Nur authentifizierte Anforderungen zulassenAllow only authenticated requests

Die Option lautet Mit <provider> anmelden.The option is Log in with <provider>. App Service leitet alle anonymen Anforderungen an /.auth/login/<provider> für den ausgewählten Anbieter um.App Service redirects all anonymous requests to /.auth/login/<provider> for the provider you choose. Wenn die anonyme Anforderung von einer nativen mobilen App stammt, wird HTTP 401 Unauthorized als Antwort zurückgegeben.If the anonymous request comes from a native mobile app, the returned response is an HTTP 401 Unauthorized.

Mit dieser Option müssen Sie in Ihrer App keinen Authentifizierungscode schreiben.With this option, you don't need to write any authentication code in your app. Eine genauere Autorisierung, z.B. rollenspezifische Autorisierung, kann durch das Untersuchen der Ansprüche des Benutzers durchgeführt werden (siehe Zugriff auf Benutzeransprüche).Finer authorization, such as role-specific authorization, can be handled by inspecting the user's claims (see Access user claims).

Achtung

Das Einschränken des Zugriffs auf diese Weise gilt für alle Aufrufe Ihrer App, was für Apps, die eine öffentlich verfügbare Startseite wünschen, eventuell nicht wünschenswert ist, wie bei vielen Single-Page-Anwendungen.Restricting access in this way applies to all calls to your app, which may not be desirable for apps wanting a publicly available home page, as in many single-page applications.

Hinweis

Standardmäßig kann jeder Benutzer in Ihrem Azure AD-Mandanten ein Token für Ihre Anwendung aus Azure AD anfordern.By default, any user in your Azure AD tenant can request a token for your application from Azure AD. Sie können die Anwendung in Azure AD konfigurieren, wenn Sie den Zugriff auf die Anwendung auf eine bestimmte Gruppe von Benutzern beschränken möchten.You can configure the application in Azure AD if you want to restrict access to your app to a defined set of users.

Weitere RessourcenMore resources

Anbieterspezifische Anleitungen:Provider-specific how-to guides: