Zugreifen auf Benutzerinformationen in Azure Static Web Apps
Von Azure Static Web Apps werden authentifizierungsbezogene Benutzerinformationen über einen Direktzugriffsendpunkt und für API-Funktionen bereitgestellt.
Viele Benutzeroberflächen hängen stark von Benutzerauthentifizierungsdaten ab. Bei dem Direktzugriffsendpunkt handelt es sich um eine Hilfs-API, die Benutzerinformationen verfügbar macht, ohne eine benutzerdefinierte Funktion implementieren zu müssen. Der Direktzugriffsendpunkt sorgt für zusätzlichen Komfort und ist auch nicht von den Kaltstartverzögerungen einer serverlosen Architektur betroffen.
Clientprinzipaldaten
Durch das Clientprinzipaldatenobjekt werden benutzerbezogene Informationen für Ihre App verfügbar gemacht. Folgenden Eigenschaften sind im Clientprinzipalobjekt enthalten:
Eigenschaft | Beschreibung |
---|---|
identityProvider |
Der Name des Identitätsanbieters. |
userId |
Ein Azure Static Web Apps-spezifischer Bezeichner für den Benutzer.
|
userDetails |
Der Benutzername oder die E-Mail-Adresse des Benutzers. Von einigen Anbietern wird die E-Mail-Adresse des Benutzers zurückgegeben, von anderen das Benutzerhandle. |
userRoles |
Ein Array der zugewiesenen Rollen des Benutzers. |
claims |
Ein Array mit Ansprüchen, die von Ihrem benutzerdefinierten Authentifizierungsanbieter zurückgegeben werden. Nur erreichbar im Endpunkt mit direktem Zugriff. |
Beim folgenden Beispiel handelt es sich um ein exemplarisches Clientprinzipalobjekt:
{
"identityProvider": "github",
"userId": "abcd12345abcd012345abcdef0123450",
"userDetails": "username",
"userRoles": ["anonymous", "authenticated"],
"claims": [{
"typ": "name",
"val": "Azure Static Web Apps"
}]
}
Direktzugriffsendpunkt
Sie können eine Anforderung vom Typ GET
an die Route /.auth/me
senden und direkten Zugriff auf die Clientprinzipaldaten erhalten. Wenn der Zustand Ihrer Ansicht von Autorisierungsdaten abhängt, erzielen Sie mit diesem Ansatz die bestmögliche Leistung.
Für angemeldete Benutzer enthält die Antwort ein JSON-Clientprinzipalobjekt. Für Anforderungen von nicht authentifizierten Benutzern wird null
zurückgegeben.
Mithilfe der Fetch1-API können Sie unter Verwendung der folgenden Syntax auf die Clientprinzipaldaten zugreifen:
async function getUserInfo() {
const response = await fetch('/.auth/me');
const payload = await response.json();
const { clientPrincipal } = payload;
return clientPrincipal;
}
(async () => {
console.log(await getUserInfo());
})();
API-Funktionen
Die API-Funktionen, die in Static Web Apps über das Azure Functions-Back-End verfügbar sind, haben Zugriff auf dieselben Benutzerinformationen wie eine Clientanwendung, mit Ausnahme des claims
-Arrays. Die API erhält zwar benutzerbezogene Informationen, führt aber keine eigenen Überprüfungen durch, ob der Benutzer authentifiziert ist oder ob sie einer erforderlichen Rolle entsprechen. Zugriffssteuerungsregeln werden in der Datei staticwebapp.config.json
definiert.
Clientprinzipaldaten werden im Anforderungsheader x-ms-client-principal
an API-Funktionen übergeben. Die Clientprinzipaldaten werden als Base64-codierte Zeichenfolge gesendet, die ein serialisiertes JSON-Objekt enthält.
Die folgende Beispielfunktion zeigt, wie Benutzerinformationen gelesen und zurückgegeben werden:
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),
},
};
};
Mithilfe der Fetch1-Browser-API können Sie unter Verwendung der folgenden Syntax auf die Antwort der API zugreifen. In diesem Beispiel wird davon ausgegangen, dass die obige Funktion user
heißt:
async function getUser() {
const response = await fetch('/api/user');
const payload = await response.json();
const { clientPrincipal } = payload;
return clientPrincipal;
}
console.log(await getUser());
Wenn ein Benutzer angemeldet ist, wird der Header x-ms-client-principal
den Anforderungen für Benutzerinformationen über die Static Web Apps Edgeknoten hinzugefügt.
Hinweis
Der x-ms-client-principal
-Header, auf den in der API-Funktion zugegriffen werden kann, enthält das claims
-Array nicht.
1 Die fetch-API und der Operator await werden in Internet Explorer nicht unterstützt.