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.
Požadavky
Webová aplikace spuštěná ve službě Aplikace Azure, která má povolený modul ověřování/autorizace služby App Service.
Přístup k deklaracím identity uživatelů v kódu aplikace
Ověření koncoví uživatelé nebo klientské aplikace vaší aplikace vytvářejí nároky v příchozích tokenech. App Service zpřístupní identitní nároky vašemu kódu tak, že je vloží do hlaviček požadavků. Externí požadavky nesmí tyto hlavičky nastavit, protože jsou přítomny jen v případě, že je aplikace App Service nastaví.
K provedení kontrol autorizace v kódu aplikace můžete použít informace o deklaracích identity, které poskytuje ověřování v rámci služby App Service. Kód v libovolném jazyce nebo rozhraní může získat potřebné informace z hlaviček požadavku. Některé architektury kódu poskytují další možnosti, které by mohly být pohodlnější. Viz alternativy specifické pro architekturu.
Následující tabulka popisuje některé ukázkové hlavičky:
| Hlavička | Popis |
|---|---|
X-MS-CLIENT-PRINCIPAL |
Reprezentace dostupných nároků zakódovaná ve formátu JSON ve formátu Base64. Další informace najdete v tématu Dekódování hlavičky klientského hlavního komponentu. |
X-MS-CLIENT-PRINCIPAL-ID |
Identifikátor, který zprostředkovatel identity nastaví pro volajícího. |
X-MS-CLIENT-PRINCIPAL-NAME |
Čitelný název, který poskytovatel identity nastaví pro volajícího, například e-mailovou adresu nebo hlavní název uživatele. |
X-MS-CLIENT-PRINCIPAL-IDP |
Název zprostředkovatele identity používaného při ověřování služby App Service. |
Podobné hlavičky zpřístupňují tokeny zprostředkovatele. Například Microsoft Entra nastaví X-MS-TOKEN-AAD-ACCESS-TOKEN a X-MS-TOKEN-AAD-ID-TOKEN hlavičky tokenu zprostředkovatele podle potřeby.
Poznámka:
App Service zpřístupňuje hlavičky požadavků všem jazykových architekturám. Různá jazyková rozhraní mohou tyto hlavičky prezentovat kódu aplikace v různých formátech, jako jsou malá písmena nebo velká písmena názvu.
Dekódování hlavičky klientského principálu
Hlavička X-MS-CLIENT-PRINCIPAL obsahuje úplnou sadu dostupných deklarací identity v kódu JSON s kódováním Base64. 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.
Poznámka:
Tyto nároky procházejí výchozím procesem mapování, takže některé názvy se můžou lišit od těch, které se zobrazují v tokenech.
Struktura dekódované datové části je následující:
{
"auth_typ": "",
"claims": [
{
"typ": "",
"val": ""
}
],
"name_typ": "",
"role_typ": ""
}
Následující tabulka popisuje vlastnosti.
| Vlastnictví | Typ | Popis |
|---|---|---|
auth_typ |
řetězec | Název zprostředkovatele identity používaného při ověřování služby App Service. |
claims |
pole | Pole objektů, které představují dostupné nároky. Každý objekt obsahuje typ a val vlastnosti. |
typ |
řetězec | Název nároku, který může podléhat výchozímu mapování nároků a může se lišit od odpovídajícího nároku v tokenu. |
val |
řetězec | Hodnota nároku. |
name_typ |
řetězec | Typ nároku na název, což je obvykle URI, které poskytuje informace o schématu nároku name, pokud je nárok definován. |
role_typ |
řetězec | Typ nároku na roli, což je obvykle URI, které poskytuje informace o schématu nároku, pokud je nějaký definován. |
Pro usnadnění můžete převést deklarace identity na reprezentaci, kterou používá jazyková architektura aplikace. Následující příklad jazyka C# vytvoří ClaimsPrincipal typ, který má 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 });
}
V tomto okamžiku může kód procházet principal.Claims a kontrolovat nároky jako součást ověřování. Alternativně můžete převést principal.Claims na standardní objekt a použít ho k provádění těchto kontrol později v kanálu žádosti. Tento objekt můžete také použít k přidružení uživatelských dat a k jiným účelům.
Zbytek funkce provede tento převod a vytvoří ClaimsPrincipal , který lze použít v jiném kódu .NET.
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);
}
}
Alternativy specifické pro rámec
V případě ASP.NET aplikací 4.6 služba App Service naplní
ClaimsPrincipal.Currentdeklaracemi identity ověřeného uživatele. Můžete postupovat podle standardního vzoru kódu .NET, včetně atributu[Authorize].ClaimsPrincipal.Currentnení naplněný kódem .NET ve službě Azure Functions, ale v hlavičce požadavku můžete stále najít deklarace identity uživatele nebo získatClaimsPrincipalobjekt z kontextu požadavku nebo prostřednictvím parametru vazby. Další informace najdete v tématu Práce s identitami klientů ve službě Azure Functions.V případě aplikací PHP služba App Service podobně naplní proměnnou
_SERVER['REMOTE_USER'].U aplikací v Javě jsou deklarace identity přístupné ze servletu Tomcat.
Pro .NET Core
Microsoft.Identity.Webpodporuje naplnění aktuálního uživatele ověřováním pomocí služby App Service. Další informace najdete v tématu Integrace s ověřováním webových aplikací azure App Services se službou Microsoft.Identity.Web. Ukázku webové aplikace, která přistupuje k Microsoft Graphu, najdete v kurzu: Přístup k Microsoft Graphu ze zabezpečené aplikace .NET jako uživatel.
Poznámka:
Aby mapování identitních deklarací fungovalo, musíte pro svou aplikaci 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é volat /.auth/me , abyste získali další podrobnosti o ověřeném uživateli.