Komma åt användarinformation i Azure Static Web Apps
Azure Static Web Apps tillhandahåller autentiseringsrelaterad användarinformation via en direktåtkomstslutpunkt och till API-funktioner.
Många användargränssnitt är starkt beroende av användarautentiseringsdata. Direktåtkomstslutpunkten är ett verktygs-API som exponerar användarinformation utan att behöva implementera en anpassad funktion. Förutom bekvämligheten är slutpunkten för direktåtkomst inte föremål för fördröjningar av kallstart som är associerade med serverlös arkitektur.
Klienthuvudnamnsdata
Klientens huvuddataobjekt exponerar användaridentifierbar information för din app. Följande egenskaper finns i klientens huvudobjekt:
Property | beskrivning |
---|---|
identityProvider |
Namnet på identitetsprovidern. |
userId |
En Azure Static Web Apps-specifik unik identifierare för användaren.
|
userDetails |
Användarens användarnamn eller e-postadress. Vissa leverantörer returnerar användarens e-postadress, medan andra skickar användarhandtaget. |
userRoles |
En matris med användarens tilldelade roller. |
claims |
En matris med anspråk som returneras av din anpassade autentiseringsprovider. Endast tillgänglig i slutpunkten för direktåtkomst. |
Följande exempel är ett huvudobjekt för exempelklienten:
{
"identityProvider": "github",
"userId": "abcd12345abcd012345abcdef0123450",
"userDetails": "username",
"userRoles": ["anonymous", "authenticated"],
"claims": [{
"typ": "name",
"val": "Azure Static Web Apps"
}]
}
Slutpunkt för direktåtkomst
Du kan skicka en GET
begäran till /.auth/me
vägen och få direkt åtkomst till klientens huvudnamnsdata. När vyns tillstånd förlitar sig på auktoriseringsdata använder du den här metoden för bästa prestanda.
För inloggade användare innehåller svaret ett JSON-objekt för klientens huvudnamn. Begäranden från oautentiserade användare returnerar null
.
Med api:et fetch1 kan du komma åt klientens huvuddata med hjälp av följande syntax.
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-funktioner
API-funktionerna som är tillgängliga i Static Web Apps via Azure Functions-serverdelen har åtkomst till samma användarinformation som ett klientprogram, med undantag för matrisen claims
. Även om API:et tar emot användar identifierbar information utför det inte egna kontroller om användaren autentiseras eller om de matchar en obligatorisk roll. Åtkomstkontrollregler definieras i staticwebapp.config.json
filen.
Klientens huvuddata skickas till API-funktioner i begärandehuvudet x-ms-client-principal
. Klientens huvuddata skickas som en Base64-kodad sträng som innehåller ett serialiserat JSON-objekt.
Följande exempelfunktion visar hur du läser och returnerar användarinformation.
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),
},
};
};
Förutsatt att funktionen ovan heter user
kan du använda webbläsar-API:et fetch1 för att komma åt API:ets svar med hjälp av följande syntax.
async function getUser() {
const response = await fetch('/api/user');
const payload = await response.json();
const { clientPrincipal } = payload;
return clientPrincipal;
}
console.log(await getUser());
När en användare är inloggad läggs huvudet till i x-ms-client-principal
begäranden om användarinformation via gränsnoderna för Static Web Apps.
Kommentar
Huvudet x-ms-client-principal
som är tillgängligt i API-funktionen innehåller inte matrisen claims
.
1 Hämtnings-API:et och inväntningsoperatorn stöds inte i Internet Explorer.