Compartilhar via


Simular uma API CRUD protegida com o Microsoft Entra

Ao criar aplicativos, você geralmente interage com APIs de back-end. Às vezes, essas APIs ainda não estão disponíveis ou outras equipes as estão atualizando para atender aos requisitos mais recentes. Para evitar espera, você normalmente cria uma API fictícia que retorna os dados necessários. Embora essa abordagem o desbloqueie, ela exige que você gaste tempo na criação de uma API que eventualmente substitua pela real. Fica ainda mais complicado quando você precisa proteger sua API com o Microsoft Entra. Para evitar perda de tempo, você pode usar o Dev Proxy para simular uma API CRUD e acelerar o desenvolvimento.

Usando o CrudApiPlugin, você pode simular uma API CRUD (Criar, Ler, Atualizar, Excluir) com um armazenamento de dados na memória. Usando um arquivo de configuração simples, você pode definir quais URLs sua API simulada suporta e quais dados ela retorna. O plug-in também oferece suporte a CORS para uso entre domínios de aplicativos do lado do cliente. O plug-in também dá suporte à autenticação do Microsoft Entra, para que você possa proteger sua API fictícia com o Microsoft Entra e implementar o mesmo fluxo de autenticação para seu aplicativo como em seu ambiente de produção.

Cenário

Digamos que você esteja criando um aplicativo que permite aos usuários gerenciar clientes. Para obter os dados, você precisa chamar o /customers ponto de extremidade da API de back-end. A API é protegida com o Microsoft Entra. Para evitar esperar que a equipe de back-end termine seu trabalho, você decide usar o Dev Proxy para simular a API e retornar os dados necessários.

Antes de começar

Você começa criando uma API CRUD simulada com dados do cliente. Depois de confirmar que a API funciona, você pode protegê-la com o Microsoft Entra.

Exemplo 1: Simular uma API CRUD protegida com o Microsoft Entra usando um único escopo

No primeiro exemplo, você protege toda a API com um único escopo. Não importa se os usuários precisam obter informações sobre os clientes ou atualizá-los, eles usam a mesma permissão.

No arquivo, adicione informações sobre o customers-api.json Entra.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/crudapiplugin.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "entra",
  "entraAuthConfig": {
    "audience": "https://api.contoso.com",
    "issuer": "https://login.microsoftonline.com/contoso.com",
    "scopes": ["api://contoso.com/user_impersonation"]
  },
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

Ao definir a auth propriedade para entra você especificar que a API é protegida com o Microsoft Entra. entraAuthConfig Na propriedade, você especifica os detalhes da configuração. A audience propriedade especifica o público-alvo da API, a issuer propriedade especifica o emissor dos tokens e a scopes propriedade especifica os escopos necessários para acessar a API. Como você define scopes no nível raiz do arquivo de API, todas as ações exigem o mesmo escopo.

Se você tentar chamar a API sem um token com o público-alvo, o emissor e os escopos especificados, receberá uma 401 Unauthorized resposta.

Observação

Nesse estágio, o Dev Proxy não valida o token. Ele verifica apenas se o token está presente e tem o público-alvo, o emissor e os escopos necessários. Isso é conveniente durante o desenvolvimento inicial, quando você ainda não tem um registro real do aplicativo Microsoft Entra e não pode obter um token real.

Exemplo 2: Simular uma API CRUD protegida com o Microsoft Entra usando escopos diferentes para ações diferentes

Em muitos casos, diferentes operações de API exigem permissões diferentes. Por exemplo, obter informações sobre clientes pode exigir uma permissão diferente de atualizá-los. Neste exemplo, você protege diferentes ações de API com escopos diferentes.

Atualize o customers-api.json arquivo da seguinte maneira:

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/crudapiplugin.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "entra",
  "entraAuthConfig": {
    "audience": "https://api.contoso.com",
    "issuer": "https://login.microsoftonline.com/contoso.com"
  },
  "actions": [
    {
      "action": "getAll",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.read"]
      }
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.read"]
      }
    },
    {
      "action": "create",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    }
  ]
}

Desta vez, você não especifica o scopes no nível raiz do arquivo de API. Em vez disso, você os especifica para cada ação. Dessa forma, você pode proteger diferentes ações com diferentes escopos. Por exemplo, obter informações sobre clientes requer o escopo, enquanto atualizar api://contoso.com/customer.read clientes requer o api://contoso.com/customer.write escopo.

Validar tokens

O Proxy de Desenvolvimento permite simular uma API CRUD protegida com o Microsoft Entra e verificar se você está usando um token válido. A validação do token é conveniente quando você tem um registro de aplicativo no Microsoft Entra, mas a equipe ainda está criando a API. Ele permite que você teste seu aplicativo com mais precisão.

Se você quiser que o Dev Proxy valide o token de acesso, adicione a entraAuthConfig validateSigningKey propriedade à propriedade e defina-a como true:

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/crudapiplugin.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "entra",
  "entraAuthConfig": {
    "audience": "https://api.contoso.com",
    "issuer": "https://login.microsoftonline.com/contoso.com",
    "scopes": ["api://contoso.com/user_impersonation"],
    "validateSigningKey": true
  },
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

Se você tentar chamar a API com um token criado por você mesmo, receberá uma 401 Unauthorized resposta. O Proxy de Desenvolvimento permite apenas solicitações com um token válido emitido pelo Microsoft Entra.

Próxima etapa

Saiba mais sobre o CrudApiPlugin.

Exemplos

Confira também os exemplos relacionados do Dev Proxy: