Anmerkung
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.
In diesem Artikel erfahren Sie, wie Sie mit Benutzeridentitäten arbeiten, wenn Sie integrierte Authentifizierung und Autorisierung in Azure App Service verwenden.
Voraussetzungen
Eine unter Azure App Service ausgeführte Webanwendung, für die das App Service-Modul für die Authentifizierung/Autorisierung aktiviert ist.
Zugreifen auf Benutzeransprüche in App-Code
Authentifizierte Endbenutzer oder Client-Anwendungen Ihrer App stellen Behauptungen in eingehenden Token. Der App Service macht die Ansprüche für Ihren Code verfügbar, indem er sie in Anforderungsheadern einfügt. Externe Anforderungen dürfen diese Header nicht festlegen, sodass sie nur vorhanden sind, wenn Der App-Dienst sie festlegt.
Sie können die Anspruchsinformationen verwenden, die die App Service-Authentifizierung bereitstellt, um Autorisierungsprüfungen in Ihrem App-Code durchzuführen. Code in einer beliebigen Sprache oder einem beliebigen Framework kann erforderliche Informationen aus den Anforderungsheadern abrufen. Einige Codeframeworks bieten zusätzliche Optionen, die möglicherweise bequemer sind. Siehe Frameworkspezifische Alternativen.
In der folgenden Tabelle werden einige Beispielüberschriften beschrieben:
| Kopfzeile | BESCHREIBUNG |
|---|---|
X-MS-CLIENT-PRINCIPAL |
Eine base64-codierte JSON-Darstellung verfügbarer Ansprüche. Weitere Informationen finden Sie unter Decodierung des Client-principal-Headers. |
X-MS-CLIENT-PRINCIPAL-ID |
Ein Bezeichner, den der Identitätsanbieter für den Aufrufer festlegt. |
X-MS-CLIENT-PRINCIPAL-NAME |
Ein lesbarer Name, den der Identitätsanbieter für den Anrufer festlegt, z. B. eine E-Mail-Adresse oder einen Benutzerprinzipalnamen. |
X-MS-CLIENT-PRINCIPAL-IDP |
Der Name des Identitätsanbieters, den die App Service-Authentifizierung verwendet. |
Ähnliche Header machen Anbietertoken verfügbar. Microsoft Entra legt die Anbietertokenheader X-MS-TOKEN-AAD-ACCESS-TOKEN und X-MS-TOKEN-AAD-ID-TOKEN sinnvoll fest.
Hinweis
Der App-Dienst stellt die Anforderungsheader für alle Sprachframeworks zur Verfügung. Verschiedene Sprachenframeworks zeigen diese Header im App-Code möglicherweise in verschiedenen Formaten an (klein geschrieben oder mit großen Anfangsbuchstaben).
Das Decodieren des Client-Principal-Headers
Der Header enthält den vollständigen Satz verfügbarer Ansprüche in Base64-codiertem JSON.The X-MS-CLIENT-PRINCIPAL header contains the full set of available claims in Base64-encoded JSON. Um diesen Header zu verarbeiten, muss Ihre App die Nutzlast decodieren und das claims Array durchlaufen, um relevante Ansprüche zu finden.
Hinweis
Diese Ansprüche werden einem standardmäßigen Anspruchszuordnungsprozess unterzogen, sodass einige Namen möglicherweise anders sind als in den Token.
Die decodierte Nutzlaststruktur lautet wie folgt:
{
"auth_typ": "",
"claims": [
{
"typ": "",
"val": ""
}
],
"name_typ": "",
"role_typ": ""
}
In der folgenden Tabelle werden die Eigenschaften beschrieben.
| Eigenschaft | type | BESCHREIBUNG |
|---|---|---|
auth_typ |
Zeichenfolge | Der Name des Identitätsanbieters, den die App Service-Authentifizierung verwendet. |
claims |
array | Ein Array von Objekten, die die verfügbaren Ansprüche darstellen. Jedes Objekt enthält die Eigenschaften typ und val. |
typ |
Zeichenfolge | Der Name des Anspruchs, der möglicherweise der Standardanspruchszuordnung unterliegt und sich von dem entsprechenden Anspruch im Token unterscheidet. |
val |
Zeichenfolge | Der Wert des Anspruchs. |
name_typ |
Zeichenfolge | Der Namensanspruchstyp, in der Regel ein URI, der Schemainformationen zum name-Anspruch bereitstellt, wenn einer definiert ist. |
role_typ |
Zeichenfolge | Der Rollenanspruchstyp, der normalerweise ein URI ist, der Schemainformationen über den role-Anspruch bereitstellt, falls einer definiert ist. |
Aus Gründen der Einfachheit können Sie Ansprüche in eine Darstellung konvertieren, die das Sprachframework der App verwendet. Im folgenden C#-Beispiel wird ein ClaimsPrincipal Typ für die zu verwendende App erstellt.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Http;
public static class ClaimsPrincipalParser
{
private class ClientPrincipalClaim
{
[JsonPropertyName("typ")]
public string Type { get; set; }
[JsonPropertyName("val")]
public string Value { get; set; }
}
private class ClientPrincipal
{
[JsonPropertyName("auth_typ")]
public string IdentityProvider { get; set; }
[JsonPropertyName("name_typ")]
public string NameClaimType { get; set; }
[JsonPropertyName("role_typ")]
public string RoleClaimType { get; set; }
[JsonPropertyName("claims")]
public IEnumerable<ClientPrincipalClaim> Claims { get; set; }
}
public static ClaimsPrincipal Parse(HttpRequest req)
{
var principal = new ClientPrincipal();
if (req.Headers.TryGetValue("x-ms-client-principal", out var header))
{
var data = header[0];
var decoded = Convert.FromBase64String(data);
var json = Encoding.UTF8.GetString(decoded);
principal = JsonSerializer.Deserialize<ClientPrincipal>(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
}
An diesem Punkt kann der Code durch principal.Claims iterieren, um Forderungen als Teil der Verifizierung zu validieren. Alternativ können Sie principal.Claims in ein Standardobjekt konvertieren und die Option nutzen, diese Prüfungen später in der Anforderungspipeline durchzuführen. Sie können dieses Objekt auch verwenden, um Benutzerdaten und andere Verwendungen zuzuordnen.
Der Rest der Funktion führt diese Konvertierung aus, um eine ClaimsPrincipal Konvertierung zu erstellen, die in anderen .NET-Code verwendet werden kann.
var identity = new ClaimsIdentity(principal.IdentityProvider, principal.NameClaimType, principal.RoleClaimType);
identity.AddClaims(principal.Claims.Select(c => new Claim(c.Type, c.Value)));
return new ClaimsPrincipal(identity);
}
}
Frameworkspezifische Alternativen
Für ASP.NET 4.6-Apps füllt App Service
ClaimsPrincipal.Currentmit den Ansprüchen des authentifizierten Benutzers. Sie können dem standardmäßigen .NET-Codemuster folgen, einschließlich des[Authorize]Attributs.ClaimsPrincipal.Currentist für .NET-Code in Azure Functions nicht aufgefüllt, aber Sie können die Benutzeransprüche weiterhin in den Anforderungsheadern finden oder dasClaimsPrincipalObjekt aus dem Anforderungskontext oder über einen Bindungsparameter abrufen. Weitere Informationen finden Sie unter Arbeiten mit Clientidentitäten in Azure Functions.Bei PHP-Apps füllt App Service die
_SERVER['REMOTE_USER']Variable auf ähnliche Weise auf.Für Java-Apps sind die Ansprüche über das Tomcat-Servlet zugänglich.
Für .NET Core unterstützt
Microsoft.Identity.Webdas Auffüllen der aktuellen Benutzenden mit der App Service-Authentifizierung. Weitere Informationen finden Sie unter Integration der Azure App Services-Authentifizierung von Web-Apps, die mit Microsoft.Identity.Web ausgeführt werden. Eine Demonstration einer Web-App, die auf Microsoft Graph zugreift, finden Sie im Lernprogramm: Zugreifen auf Microsoft Graph aus einer gesicherten .NET-App als Benutzer.
Hinweis
Damit die Anspruchszuordnung funktioniert, müssen Sie den Tokenspeicher für Ihre App aktivieren.
Zugreifen auf Benutzeransprüche mithilfe der API
Wenn der Tokenspeicher für Ihre App aktiviert ist, können Sie auch aufrufen /.auth/me , um weitere Details zum authentifizierten Benutzer abzurufen.