Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak pracovat s identitami uživatelů při použití integrovaného ověřování a autorizace ve službě Azure App Service.
Přístup k deklaracím identity uživatelů v kódu aplikace
Pro všechna jazyková rozhraní služba App Service zpřístupní deklarace identity v příchozím tokenu (ať už od ověřeného koncového uživatele nebo z klientské aplikace) do kódu vložením do hlaviček požadavku. External requests aren't allowed to set these headers, so they're present only if set by App Service.
Některé ukázkové hlavičky jsou popsány v následující tabulce:
Hlavička | Popis |
---|---|
X-MS-CLIENT-PRINCIPAL |
Reprezentace dostupných nároků zakódovaná ve formátu JSON ve formátu Base64. For more information, see Decode the client principal header. |
X-MS-CLIENT-PRINCIPAL-ID |
Identifikátor volajícího, který nastaví poskytovatel identity. |
X-MS-CLIENT-PRINCIPAL-NAME |
Srozumitelné pro člověka jméno volajícího, které nastavil zprostředkovatel identity, například e-mailová adresa nebo uživatelské hlavní jméno. |
X-MS-CLIENT-PRINCIPAL-IDP |
Název zprostředkovatele identity používaného při ověřování služby App Service. |
Tokeny zprostředkovatele jsou také zpřístupněny prostřednictvím podobných hlaviček. Například Microsoft Entra také nastaví X-MS-TOKEN-AAD-ACCESS-TOKEN
a X-MS-TOKEN-AAD-ID-TOKEN
podle potřeby.
Poznámka:
Různá jazyková rozhraní můžou tyto hlavičky prezentovat kódu aplikace v různých formátech, například malými písmeny nebo pomocí písmen názvu.
Kód napsaný v libovolném jazyce nebo rozhraní může získat informace, které potřebuje, z těchto hlaviček. Decode the client principal header covers this process. V některých architekturách poskytuje platforma také další možnosti, které by mohly být pohodlnější.
Decode the client principal header
X-MS-CLIENT-PRINCIPAL
obsahuje úplnou sadu dostupných nároků ve formátu JSON s kódováním Base64. These claims go through a default claims-mapping process, so some might have different names than you would see if you processed the token directly.
Takto je dekódovaná datová část strukturovaná:
{
"auth_typ": "",
"claims": [
{
"typ": "",
"val": ""
}
],
"name_typ": "",
"role_typ": ""
}
Property | Typ | Popis |
---|---|---|
auth_typ |
string | Název zprostředkovatele identity používaného při ověřování služby App Service. |
claims |
pole objektů | Pole objektů, které představují dostupné nároky. Každý objekt obsahuje typ a val vlastnosti. |
typ |
string | Název nároku. Může se jednat o výchozí mapování nároků a může se lišit od odpovídajícího nároku obsaženého v tokenu. |
val |
string | Hodnota nároku. |
name_typ |
string | The name claim type, which is typically a URI that provides scheme information about the name claim if one is defined. |
role_typ |
string | The role claim type, which is typically a URI that provides scheme information about the role claim if one is defined. |
Aby bylo možné tuto hlavičku zpracovat, musí vaše aplikace dekódovat datovou část a procházet pole claims
, aby našla relevantní nároky. Může být vhodné převést deklarace identity na reprezentaci, kterou používá jazyková architektura aplikace. Tady je příklad tohoto procesu v jazyce C#, který vytvoří ClaimsPrincipal
typ, který bude aplikace používat:
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 });
}
/**
* At this point, the code can iterate through `principal.Claims` to
* check claims as part of validation. Alternatively, you can convert
* it into a standard object with which to perform those checks later
* in the request pipeline. That object can also be leveraged for
* associating user data, and so on. The rest of this function performs such
* a conversion to create a `ClaimsPrincipal` as might be used in
* other .NET code.
*/
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);
}
}
Framework-specific alternatives
V případě ASP.NET aplikací 4.6 služba App Service naplní ClaimsPrincipal.Current
deklaracemi identity ověřeného uživatele. Můžete postupovat podle standardního vzoru kódu .NET, včetně atributu [Authorize
]. Podobně app Service pro aplikace PHP naplní proměnnou _SERVER['REMOTE_USER']
. U aplikací v Javě jsou nároky přístupné ze servletu Tomcat.
For Azure Functions, ClaimsPrincipal.Current
isn't 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. Další informace najdete v tématu Práce s identitami klientů ve službě Azure Functions.
For .NET Core, Microsoft.Identity.Web
supports populating the current user with App Service authentication. Další informace najdete na wikiwebu Microsoft.Identity.Web nebo si ho můžete prohlédnout v tomto kurzu pro webovou aplikaci, která přistupuje k Microsoft Graphu.
Poznámka:
Aby mapování nároků fungovalo, musíte povolit úložiště tokenů.
Přístup k deklaracím identity uživatelů pomocí rozhraní API
Pokud je pro vaši aplikaci povolené úložiště tokenů, můžete také získat další podrobnosti o ověřeném uživateli voláním /.auth/me
.