Přístup k informacím o uživatelích ve službě Azure Static Web Apps
Azure Static Web Apps poskytuje informace o uživateli související s ověřováním prostřednictvím koncového bodu přímého přístupu a funkcí rozhraní API.
Mnoho uživatelských rozhraní se hodně spoléhá na ověřovací data uživatelů. Koncový bod přímého přístupu je rozhraní API nástroje, které zveřejňuje informace o uživatelích bez nutnosti implementovat vlastní funkci. Kromě pohodlí koncový bod přímého přístupu podléhá zpožděním studených startů, která jsou přidružená k bezserverové architektuře.
Data objektu zabezpečení klienta
Objekt dat instančního objektu klienta zveřejňuje pro vaši aplikaci identifikovatelné informace uživatele. V objektu instančního objektu klienta jsou uvedené následující vlastnosti:
Vlastnost | Popis |
---|---|
identityProvider |
Název zprostředkovatele identity. |
userId |
Jedinečný identifikátor specifický pro Azure Static Web Apps pro uživatele.
|
userDetails |
Uživatelské jméno nebo e-mailová adresa uživatele Někteří poskytovatelé vrátí e-mailovou adresu uživatele, zatímco jiní odesílají popisovač uživatele. |
userRoles |
Pole přiřazenýchrolích |
claims |
Pole deklarací identity vrácené vaším vlastním zprostředkovatelem ověřování. Přístupná pouze v koncovém bodu přímého přístupu. |
Následující příklad je ukázkový objekt instančního objektu klienta:
{
"identityProvider": "github",
"userId": "abcd12345abcd012345abcdef0123450",
"userDetails": "username",
"userRoles": ["anonymous", "authenticated"],
"claims": [{
"typ": "name",
"val": "Azure Static Web Apps"
}]
}
Koncový bod přímého přístupu
Můžete odeslat GET
požadavek na trasu /.auth/me
a přijímat přímý přístup k datům objektu zabezpečení klienta. Pokud stav zobrazení závisí na autorizačních datech, použijte tento přístup k zajištění nejlepšího výkonu.
Pro přihlášené uživatele obsahuje odpověď objekt JSON objektu ZABEZPEČENÍ klienta. Požadavky od neověřených uživatelů vrátí null
.
Pomocí rozhraní API pro načtení1 můžete přistupovat k datům objektu zabezpečení klienta pomocí následující syntaxe.
async function getUserInfo() {
const response = await fetch('/.auth/me');
const payload = await response.json();
const { clientPrincipal } = payload;
return clientPrincipal;
}
(async () => {
console.log(await getUserInfo());
})();
Funkce rozhraní API
Funkce rozhraní API dostupné ve Static Web Apps prostřednictvím back-endu Azure Functions mají přístup ke stejným informacím o uživateli jako klientská aplikace s výjimkou claims
pole. I když rozhraní API přijímá identifikovatelné informace uživatele, neprovádí vlastní kontroly, pokud je uživatel ověřený nebo jestli odpovídá požadované roli. Pravidla řízení přístupu jsou definována staticwebapp.config.json
v souboru.
Data objektu x-ms-client-principal
zabezpečení klienta se předávají funkcím rozhraní API v hlavičce požadavku. Data objektu zabezpečení klienta se odesílají jako řetězec s kódováním Base64 obsahující serializovaný objekt JSON.
Následující ukázková funkce ukazuje, jak číst a vracet informace o uživateli.
module.exports = async function (context, req) {
const header = req.headers.get('x-ms-client-principal');
const encoded = Buffer.from(header, 'base64');
const decoded = encoded.toString('ascii');
context.res = {
body: {
clientPrincipal: JSON.parse(decoded),
},
};
};
Za předpokladu, že je výše uvedená funkce pojmenovaná user
, můžete pomocí rozhraní API pro načtení1 prohlížeče získat přístup k odpovědi rozhraní API pomocí následující syntaxe.
async function getUser() {
const response = await fetch('/api/user');
const payload = await response.json();
const { clientPrincipal } = payload;
return clientPrincipal;
}
console.log(await getUser());
Když je uživatel přihlášený, x-ms-client-principal
přidá se hlavička do požadavků na informace o uživateli prostřednictvím hraničních uzlů Static Web Apps.
Poznámka:
Hlavička x-ms-client-principal
přístupná ve funkci rozhraní API neobsahuje claims
pole.
1 Operátor pro načtení a operátor await se v Internet Exploreru nepodporuje.