Compartilhar via


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 a ID do Microsoft Entra, por exemplo), você pode utilizar os Simulator provedores de autenticação:

1. Usar o provedor Simulator

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 Authenticateddo 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 funcionam porque as declarações personalizadas não podem ser definidas para o usuário autenticado com o Simulator provedor.

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 Simulator e o modo development está especificado. Consulte esta seção de configuração de exemplo host :

"host": {
  "mode": "development",
  "authentication": {
    "provider": "Simulator"
  }
}

Especificar o contexto de função da solicitação

Com Simulator como provedor de autenticação do Data API Builder, 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 para qualquer outra função, incluindo a função Anonymousdo 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' \

2. Usar o AppService provedor

O provedor de autenticação instrui o Data API builder a procurar um conjunto de cabeçalhos HTTP que estão presentes apenas quando executados em um ambiente de Azure Container Apps. 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.

"host": {
  "mode": "development",
  "authentication": {
    "provider": "AppService"
  }
}

Enviar solicitações fornecendo um cabeçalho gerado X-MS-CLIENT-PRINCIPAL

Depois que a API de Dados estiver sendo executada localmente e configurada para usar o provedor de autenticação AppService, você poderá gerar um objeto principal do cliente manualmente usando o seguinte modelo:

{  
  "identityProvider": "test",
  "userId": "12345",
  "userDetails": "john@contoso.com",
  "userRoles": ["author", "editor"]
}

O Serviço de Aplicativo tem as seguintes propriedades:

Propriedade Descrição
identityProvider Qualquer valor de cadeia de caracteres.
ID do usuário Um identificador exclusivo para o usuário.
Detalhes do usuário Nome ou endereço de email do usuário.
funçõesDoUsuário Uma matriz das funções atribuídas pelo usuário.

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'