Toegang tot gebruikersgegevens in Azure Static Web Apps
Azure Static Web Apps biedt verificatiegerelateerde gebruikersgegevens via een eindpunt voor directe toegang en api-functies.
Veel gebruikersinterfaces zijn sterk afhankelijk van gebruikersverificatiegegevens. Het eindpunt voor directe toegang is een hulpprogramma-API waarmee gebruikersgegevens worden weergegeven zonder dat u een aangepaste functie hoeft te implementeren. Buiten het gemak is het eindpunt voor directe toegang niet onderhevig aan koude startvertragingen die zijn gekoppeld aan serverloze architectuur.
Client-principalgegevens
Client principal-gegevensobject maakt gebruikersidentificeerbare informatie beschikbaar voor uw app. De volgende eigenschappen worden weergegeven in het client-principal-object:
Eigenschappen | Beschrijving |
---|---|
identityProvider |
De naam van de id-provider. |
userId |
Een azure Static Web Apps-specifieke unieke id voor de gebruiker.
|
userDetails |
Gebruikersnaam of e-mailadres van de gebruiker. Sommige providers retourneren het e-mailadres van de gebruiker, terwijl anderen de gebruikershandgreep verzenden. |
userRoles |
Een matrix van de toegewezen rollen van de gebruiker. |
claims |
Een matrix met claims die worden geretourneerd door uw aangepaste verificatieprovider. Alleen toegankelijk in het eindpunt voor directe toegang. |
Het volgende voorbeeld is een voorbeeld van een client-principal-object:
{
"identityProvider": "github",
"userId": "abcd12345abcd012345abcdef0123450",
"userDetails": "username",
"userRoles": ["anonymous", "authenticated"],
"claims": [{
"typ": "name",
"val": "Azure Static Web Apps"
}]
}
Eindpunt voor directe toegang
U kunt een GET
aanvraag verzenden naar de /.auth/me
route en directe toegang tot de client-principalgegevens ontvangen. Wanneer de status van uw weergave afhankelijk is van autorisatiegegevens, gebruikt u deze methode voor de beste prestaties.
Voor aangemelde gebruikers bevat het antwoord een JSON-object van de client-principal. Aanvragen van niet-geverifieerde gebruikers retourneren null
.
Met behulp van de fetch1 API hebt u toegang tot de client-principalgegevens met behulp van de volgende syntaxis.
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-functies
De API-functies die beschikbaar zijn in Static Web Apps via de Back-end van Azure Functions, hebben toegang tot dezelfde gebruikersgegevens als een clienttoepassing, met uitzondering van de claims
matrix. Hoewel de API gebruikersgegevens ontvangt, voert de API geen eigen controles uit als de gebruiker is geverifieerd of als deze overeenkomt met een vereiste rol. Regels voor toegangsbeheer worden gedefinieerd in het staticwebapp.config.json
bestand.
Client-principalgegevens worden doorgegeven aan API-functies in de x-ms-client-principal
aanvraagheader. De client-principalgegevens worden verzonden als een met Base64 gecodeerde tekenreeks die een geserialiseerd JSON-object bevat.
In de volgende voorbeeldfunctie ziet u hoe u gebruikersgegevens leest en retourneert.
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),
},
};
};
Ervan uitgaande dat de bovenstaande functie een naam user
heeft, kunt u de fetch1-browser-API gebruiken om toegang te krijgen tot het antwoord van de API met behulp van de volgende syntaxis.
async function getUser() {
const response = await fetch('/api/user');
const payload = await response.json();
const { clientPrincipal } = payload;
return clientPrincipal;
}
console.log(await getUser());
Wanneer een gebruiker is aangemeld, wordt de x-ms-client-principal
header toegevoegd aan de aanvragen voor gebruikersgegevens via de Edge-knooppunten van Static Web Apps.
Notitie
De x-ms-client-principal
header die toegankelijk is in de API-functie bevat niet de claims
matrix.
1 De ophaal-API en de wachtoperator worden niet ondersteund in Internet Explorer.