Felhasználói identitások használata Azure App Service hitelesítésben
Ez a cikk bemutatja, hogyan használhatja a felhasználói identitásokat a beépített hitelesítés és engedélyezés használatakor App Service.
Felhasználói jogcímek elérése az alkalmazáskódban
Az összes nyelvi keretrendszer esetében App Service elérhetővé teszi a bejövő jogkivonatban szereplő jogcímeket (akár hitelesített végfelhasználótól, akár ügyfélalkalmazástól) a kód számára úgy, hogy beszúrja őket a kérésfejlécekbe. A külső kérések nem állíthatják be ezeket a fejléceket, így csak akkor jelennek meg, ha a App Service állítja be őket. Néhány példa fejlécek:
Fejléc | Description |
---|---|
X-MS-CLIENT-PRINCIPAL |
A rendelkezésre álló jogcímek Base64 kódolású JSON-reprezentációja. További információ: Az ügyfélnév fejlécének dekódolása. |
X-MS-CLIENT-PRINCIPAL-ID |
Az identitásszolgáltató által beállított hívó azonosítója. |
X-MS-CLIENT-PRINCIPAL-NAME |
Az identitásszolgáltató által beállított hívó személy által olvasható neve, például Email Cím, Egyszerű felhasználónév. |
X-MS-CLIENT-PRINCIPAL-IDP |
Az App Service-hitelesítés által használt identitásszolgáltató neve. |
A szolgáltatói jogkivonatok hasonló fejléceken keresztül is elérhetők. A Microsoft Identity Provider például a és X-MS-TOKEN-AAD-ID-TOKEN
a megfelelő beállítást is beállítjaX-MS-TOKEN-AAD-ACCESS-TOKEN
.
Megjegyzés
A különböző nyelvi keretrendszerek ezeket a fejléceket különböző formátumokban, például kisbetűs vagy címes formában jeleníthetik meg az alkalmazáskódban.
A bármilyen nyelven vagy keretrendszerben írt kód ezekből a fejlécekből lekérheti a szükséges információkat. Az ügyfélnév fejlécének dekódolása lefedi ezt a folyamatot. Egyes keretrendszerek esetében a platform további lehetőségeket is kínál, amelyek kényelmesebbek lehetnek.
Az ügyfélnév fejlécének dekódolása
X-MS-CLIENT-PRINCIPAL
A a rendelkezésre álló jogcímek teljes készletét Tartalmazza Base64 kódolású JSON-ként. Ezek a jogcímek egy alapértelmezett jogcímleképezési folyamaton mennek keresztül, ezért előfordulhat, hogy egyes jogcímek neve eltér attól, amit a jogkivonat közvetlen feldolgozásakor látna. A dekódolt hasznos adat a következőképpen van strukturálva:
{
"auth_typ": "",
"claims": [
{
"typ": "",
"val": ""
}
],
"name_typ": "",
"role_typ": ""
}
Tulajdonság | Típus | Description |
---|---|---|
auth_typ |
sztring | Az App Service-hitelesítés által használt identitásszolgáltató neve. |
claims |
objektumtömb | Az elérhető jogcímeket képviselő objektumok tömbje. Minden objektum tartalmaz typ és val tulajdonságokat. |
typ |
sztring | A jogcím neve. Előfordulhat, hogy ez az alapértelmezett jogcímleképezés hatálya alá tartozik, és eltérhet a jogkivonatban található megfelelő jogcímtől. |
val |
sztring | A jogcím értéke. |
name_typ |
sztring | A névjogcím típusa, amely általában egy URI, amely sémaadatokat ad meg a name jogcímről, ha van definiálva. |
role_typ |
sztring | A szerepkörjogcím típusa, amely általában egy URI, amely sémainformációkat ad meg a role jogcímről, ha van definiálva. |
A fejléc feldolgozásához az alkalmazásnak dekódolnia kell a hasznos adatokat, és iterálnia kell a tömbön a claims
kívánt jogcímek megkereséséhez. Ezeket kényelmesen átalakíthatja az alkalmazás nyelvi keretrendszere által használt reprezentációvá. Íme egy példa erre a C#-beli folyamatra, amely egy ClaimsPrincipal típust hoz létre az alkalmazás számára:
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, we 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, etc. 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);
}
}
Keretrendszerspecifikus alternatívák
A ASP.NET 4.6-os alkalmazások esetében App Service feltölti a ClaimsPrincipal.Current függvényt a hitelesített felhasználó jogcímeivel, így követheti a szabványos .NET-kódmintát, beleértve az [Authorize]
attribútumot is. Ehhez hasonlóan a PHP-alkalmazások esetében App Service feltölti a változót_SERVER['REMOTE_USER']
. Java-alkalmazások esetén a jogcímek a Tomcat servletből érhetők el.
A Azure FunctionsClaimsPrincipal.Current
esetében a rendszer nem tölti ki a .NET-kódot, de továbbra is megtalálhatja a felhasználói jogcímeket a kérelemfejlécekben, vagy lekérheti az ClaimsPrincipal
objektumot a kérelemkörnyezetből vagy akár egy kötési paraméteren keresztül. További információ: Az ügyfélidentitások használata Azure Functions.
A .NET Core esetében a Microsoft.Identity.Web támogatja az aktuális felhasználó feltöltését App Service hitelesítéssel. További információért olvassa el a Microsoft.Identity.Web wikiben, vagy tekintse meg a Microsoft Graphot elérő webalkalmazásokkal kapcsolatos oktatóanyagban.
Megjegyzés
Ahhoz, hogy a jogcímek leképezése működjön, engedélyeznie kell a tokentárolót.
Felhasználói jogcímek elérése az API használatával
Ha a jogkivonat-tároló engedélyezve van az alkalmazáshoz, a hitelesített felhasználóról további részleteket is beszerezhet a meghívásával /.auth/me
.