Autenticação Local no Construtor de API de Dados
Ao desenvolver uma solução com o Construtor de API de Dados localmente ou ao executar o construtor de API de Dados no local, tem de testar as opções de autenticação e autorização configuradas ao simular um pedido com uma função ou afirmação específica.
Para simular um pedido autenticado sem configurar um fornecedor de autenticação (como Microsoft Entra ID, por exemplo), pode utilizar os Simulator
fornecedores de autenticação ouStaticWebApps
:
Utilizar o Simulator
fornecedor
Simulator
é um fornecedor de autenticação configurável que instrui o motor do construtor de API de Dados a tratar todos os pedidos como autenticados.
- No mínimo, todos os pedidos são avaliados no contexto da função
Authenticated
de sistema . - Se desejar, o pedido é avaliado no contexto de qualquer função indicada no
X-MS-API-ROLE
cabeçalho Http.
Nota
Embora a função pretendida seja respeitada, as permissões de autorização que definem as políticas de base de dados não funcionarão porque as afirmações personalizadas não podem ser definidas para o utilizador autenticado com o Simulator
fornecedor. Continue para a secção Utilizar o StaticWebApps
fornecedor para testar as políticas de autorização da base de dados.
1. Atualize o fornecedor de autenticação de configuração do runtime
Certifique-se de que, no ficheiro de configuração, está a utilizar o Simulator
fornecedor de autenticação e development
o modo está especificado. Veja esta secção de configuração de exemplo host
:
"host": {
"mode": "development",
"authentication": {
"provider": "Simulator"
}
}
2. Especifique o contexto de função do pedido
Com Simulator
o fornecedor de autenticação do Construtor de API de Dados, não é necessário nenhum cabeçalho personalizado para definir o contexto de função para a função Authenticated
de sistema:
curl --request GET \
--url http://localhost:5000/api/books \
Para definir o contexto da função para qualquer outra função, incluindo a função Anonymous
de sistema, o X-MS-API-ROLE
cabeçalho tem de ser incluído com a função pretendida:
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
Utilizar o StaticWebApps
fornecedor
O StaticWebApps
fornecedor de autenticação instrui o Construtor de API de Dados a procurar um conjunto de cabeçalhos HTTP apenas presentes quando são executados num ambiente Aplicações Web Estáticas. O cliente define estes cabeçalhos HTTP ao executar localmente para simular um utilizador autenticado, incluindo qualquer associação a funções ou afirmações personalizadas.
Nota
As instâncias fornecidas pelo cliente do cabeçalho Http, X-MS-CLIENT-PRINCIPAL
, só funcionarão ao desenvolver localmente porque os ambientes de Aplicações Web Estáticas do Azure de produção deixam cair todas as instâncias fornecidas pelo cliente desse cabeçalho.
Certifique-se de que, no ficheiro de configuração, está a utilizar o StaticWebApps
fornecedor de autenticação. Veja esta secção de configuração de exemplo host
:
"host": {
"mode": "development",
"authentication": {
"provider": "StaticWebApps"
}
}
1. Enviar pedidos que fornecem um cabeçalho gerado X-MS-CLIENT-PRINCIPAL
Assim que o Construtor de API de Dados estiver a ser executado localmente e configurado para utilizar o StaticWebApps
fornecedor de autenticação, pode gerar manualmente um objeto principal de cliente com o seguinte modelo:
{
"identityProvider": "test",
"userId": "12345",
"userDetails": "john@contoso.com",
"userRoles": ["author", "editor"]
}
Os metadados de utilizador autenticados da Aplicação Web Estática têm as seguintes propriedades:
Propriedade | Descrição |
---|---|
identityProvider | Qualquer valor de cadeia. |
userId | Um identificador exclusivo para o utilizador. |
userDetails | Nome de utilizador ou endereço de e-mail do utilizador. |
userRoles | Uma matriz das funções atribuídas pelo utilizador. |
Nota
Conforme indicado na documentação Aplicações Web Estáticas, o X-MS-CLIENT-PRINCIPAL
cabeçalho não contém a claims
matriz.
Para ser transmitido com o X-MS-CLIENT-PRINCIPAL
cabeçalho, o payload JSON tem de ser codificado com Base64. Pode utilizar qualquer ferramenta online ou offline para o fazer. Uma dessas ferramentas é DevToys. Um payload codificado com base64 de exemplo que representa o JSON referenciado anteriormente:
eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9
O seguinte pedido cURL simula um utilizador autenticado a obter a lista de registos de entidades disponíveis Book
no contexto da função author
:
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
--header 'X-MS-CLIENT-PRINCIPAL: eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9'