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.
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 nepodléhá zpožděním studených startů, která jsou spojena s bezserverovou architekturou.
Tento článek ukazuje, jak číst informace o uživateli z nasazené aplikace. Pokud chcete přečíst emulované informace o uživateli během místního vývoje, přečtěte si téma Autorizace a emulace ověřování.
Hlavní údaje klienta
Objekt dat hlavního klienta odhaluje vaší aplikaci uživatelsky identifikovatelné informace. V klientském hlavním objektu jsou uvedené následující vlastnosti:
| Vlastnost | Popis |
|---|---|
identityProvider |
Název poskytovatele 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é vracejí e-mailovou adresu uživatele, zatímco jiní odesílají identifikátor uživatele. |
userRoles |
Pole přiřazených rolí uživatele. |
claims |
Pole nároků vrácených 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 hlavního 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 získat přímý přístup k datům hlavního 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ěď JSON objekt klientského hlavního objektu. Požadavky od neověřených uživatelů vrátí null.
Pomocí rozhraní Fetch API1 můžete přistupovat k datům klientského hlavního objektu 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 v souboru staticwebapp.config.json.
Data hlavního klienta se předávají funkcím API v hlavičce požadavku x-ms-client-principal. Data hlavního objektu klienta jsou odesílána jako kódovaný řetězec 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ý, hlavička x-ms-client-principal je přidána do požadavků na informace o uživateli pomocí 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.