Autenticação local no construtor de API de Dados
Ao desenvolver uma solução usando o Construtor de API de Dados localmente ou ao executar o Construtor de API de Dados localmente, você precisa testar as opções de autenticação e autorização configuradas simulando uma solicitação com uma função ou declaração específica.
Para simular uma solicitação autenticada sem configurar um provedor de autenticação (como Microsoft Entra ID, por exemplo), você pode utilizar os Simulator
provedores de autenticação ou StaticWebApps
:
Usar o Simulator
provedor
Simulator
é um provedor de autenticação configurável que instrui o mecanismo do construtor de API de Dados a tratar todas as solicitações como autenticadas.
- No mínimo, todas as solicitações são avaliadas no contexto da função
Authenticated
do sistema . - Se desejado, a solicitação é avaliada no contexto de qualquer função indicada no
X-MS-API-ROLE
cabeçalho Http.
Observação
Embora a função desejada seja respeitada, as permissões de autorização que definem políticas de banco de dados não funcionarão porque as declarações personalizadas não podem ser definidas para o usuário autenticado com o Simulator
provedor. Continue para a seção Usar o StaticWebApps
provedor para testar políticas de autorização de banco de dados.
1. Atualizar o provedor de autenticação de configuração de runtime
Verifique se no arquivo de configuração você está usando o provedor de autenticação e development
o Simulator
modo está especificado. Consulte esta seção de configuração de exemplo host
:
"host": {
"mode": "development",
"authentication": {
"provider": "Simulator"
}
}
2. Especifique o contexto de função da solicitação
Com Simulator
como provedor de autenticação do Construtor de API de Dados, nenhum cabeçalho personalizado é necessário para definir o contexto de função para a função Authenticated
do sistema :
curl --request GET \
--url http://localhost:5000/api/books \
Para definir o contexto de função como qualquer outra função, incluindo a função Anonymous
do sistema , o X-MS-API-ROLE
cabeçalho deve ser incluído com a função desejada:
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
Usar o StaticWebApps
provedor
O StaticWebApps
provedor de autenticação instrui o Construtor de API de Dados a procurar um conjunto de cabeçalhos HTTP presentes somente ao executar em um ambiente de Aplicativos Web Estáticos. O cliente define esses cabeçalhos HTTP ao executar localmente para simular um usuário autenticado, incluindo qualquer associação de função ou declarações personalizadas.
Observação
As instâncias fornecidas pelo cliente do cabeçalho Http, X-MS-CLIENT-PRINCIPAL
, só funcionarão ao desenvolver localmente porque os ambientes de Aplicativos Web Estáticos do Azure de produção removem todas as instâncias fornecidas pelo cliente desse cabeçalho.
Verifique se no arquivo de configuração você está usando o StaticWebApps
provedor de autenticação. Consulte esta seção de configuração de exemplo host
:
"host": {
"mode": "development",
"authentication": {
"provider": "StaticWebApps"
}
}
1. Enviar solicitações fornecendo um cabeçalho gerado X-MS-CLIENT-PRINCIPAL
Depois que o construtor de API de Dados estiver em execução localmente e configurado para usar o StaticWebApps
provedor de autenticação, você poderá gerar um objeto de entidade de segurança do cliente manualmente usando o seguinte modelo:
{
"identityProvider": "test",
"userId": "12345",
"userDetails": "john@contoso.com",
"userRoles": ["author", "editor"]
}
Os metadados de usuário autenticados do Aplicativo Web Estático têm as seguintes propriedades:
Propriedade | Descrição |
---|---|
identityProvider | Qualquer valor de cadeia de caracteres. |
userId | Um identificador exclusivo do usuário. |
userDetails | Nome ou endereço de email do usuário. |
userRoles | Uma matriz das funções atribuídas do usuário. |
Observação
Conforme observado na documentação do Aplicativos Web Estáticos, o X-MS-CLIENT-PRINCIPAL
cabeçalho não contém a claims
matriz.
Para ser passado com o X-MS-CLIENT-PRINCIPAL
cabeçalho, o conteúdo JSON deve ser codificado em Base64. Você pode usar qualquer ferramenta online ou offline para fazer isso. Uma dessas ferramentas é o DevToys. Um exemplo de conteúdo codificado em Base64 que representa o JSON referenciado anteriormente:
eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9
A solicitação cURL a seguir simula um usuário autenticado recuperando a lista de registros de entidade disponíveis Book
no contexto da author
função:
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
--header 'X-MS-CLIENT-PRINCIPAL: eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9'