Sdílet prostřednictvím


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 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.
  • Hodnota je jedinečná pro jednotlivé aplikace. Stejný uživatel například vrátí jinou userId hodnotu u jiného prostředku Static Web Apps.
  • Hodnota se zachová po celou dobu života uživatele. Pokud odstraníte a přidáte stejného uživatele zpět do aplikace, vygeneruje se nový userId .
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.

Další kroky