Acessando informações do usuário no serviço Aplicativos Web Estáticos
O serviço Aplicativos Web Estáticos do Azure fornece informações do usuário relacionadas à autenticação via um ponto de extremidade de acesso direto e para funções da API.
Muitas interfaces do usuário dependem expressivamente dos dados de autenticação de usuário. O ponto de extremidade de acesso direto é uma API utilitária que expõe informações do usuário sem a necessidade de implementar uma função personalizada. Além da conveniência, o ponto de extremidade de acesso direto não está sujeito a atrasos de inicialização a frios associados à arquitetura sem servidor.
Dados da entidade de segurança do cliente.
O objeto de dados da entidade de segurança do cliente expõe informações de identificação do usuário para seu aplicativo. As propriedades a seguir são apresentadas no objeto de entidade de segurança do cliente:
Propriedade | Descrição |
---|---|
identityProvider |
O nome do provedor de identidade. |
userId |
Um identificador exclusivo específico do serviço Aplicativo Web Estáticos do Azure do usuário.
|
userDetails |
Nome ou endereço de email do usuário. Alguns provedores retornam o endereço de email do usuário, enquanto outros enviam o identificador do usuário. |
userRoles |
Uma matriz das funções atribuídas do usuário. |
claims |
Uma matriz de declarações retornadas pelo seu provedor de autenticação personalizado. Acessível somente no ponto de extremidade de acesso direto. |
O exemplo a seguir é de um objeto de entidade de segurança do cliente:
{
"identityProvider": "github",
"userId": "abcd12345abcd012345abcdef0123450",
"userDetails": "username",
"userRoles": ["anonymous", "authenticated"],
"claims": [{
"typ": "name",
"val": "Azure Static Web Apps"
}]
}
Ponto de extremidade de acesso direto
Você pode enviar uma solicitação de GET
para a rota /.auth/me
e receber acesso direto aos dados da entidade de segurança do cliente. Se o estado da sua exibição depender dos dados de autorização, use essa abordagem para obter o melhor desempenho.
Para usuários conectados, a resposta contém um objeto JSON da entidade de segurança do cliente. As solicitações de usuários não autenticados retornam null
.
Com a API fetch1, você pode acessar os dados da entidade de segurança do cliente usando a sintaxe a seguir.
async function getUserInfo() {
const response = await fetch('/.auth/me');
const payload = await response.json();
const { clientPrincipal } = payload;
return clientPrincipal;
}
(async () => {
console.log(await getUserInfo());
})();
Funções de API
As funções de API disponíveis em aplicativos Web estáticos por meio do back-end do Azure Functions têm acesso às mesmas informações de usuário que um aplicativo cliente, com exceção da matriz claims
. Embora a API receba informações de identificação do usuário, ela não executa suas próprias verificações se o usuário é autenticado ou se corresponde a uma função necessária. As regras de controle de acesso são definidas no arquivo staticwebapp.config.json
.
Os dados da entidade de segurança do cliente são passados para funções da API no cabeçalho da solicitação x-ms-client-principal
. Os dados da entidade de segurança do cliente são enviados como uma cadeia de caracteres de codificação Base64 que contém um objeto JSON serializado.
A função de exemplo a seguir mostra como ler e retornar informações do usuário.
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),
},
};
};
Supondo que a função acima seja denominada user
, você pode usar a API de navegador fetch1 para acessar a resposta da API usando a sintaxe a seguir.
async function getUser() {
const response = await fetch('/api/user');
const payload = await response.json();
const { clientPrincipal } = payload;
return clientPrincipal;
}
console.log(await getUser());
Quando um usuário está conectado, o cabeçalho x-ms-client-principal
é adicionado às solicitações de informações do usuário por meio dos nós de borda dos Aplicativos Web Estáticos.
Observação
O cabeçalho x-ms-client-principal
acessível na função de API não contém a matriz claims
.
1 A API fetch e o operador await não são compatíveis com o Internet Explorer.