Compartilhar via


Guia de início rápido: Proteger uma API Web ASP.NET Core com a plataforma de identidade da Microsoft

Este início rápido usa um exemplo de código da API Web do ASP.NET Core para demonstrar como restringir o acesso a recursos a contas autorizadas. O exemplo usa ASP.NET Core Identidade que interage com a MSAL (Biblioteca de Autenticação da Microsoft) para lidar com a autenticação.

Pré-requisitos

Registrar o aplicativo e os identificadores de registro

Dica

As etapas neste artigo podem variar ligeiramente com base no portal do qual você começa.

Para concluir o registro, forneça um nome ao aplicativo e especifique os tipos de conta com suporte. Uma vez registrada, a página Visão geral do aplicativo exibe os identificadores necessários no código-fonte do aplicativo.

  1. Faça login no Centro de administração do Microsoft Entra como pelo menos um Desenvolvedor de aplicativos.

  2. Se você tiver acesso a vários locatários, use o ícone de Configurações no menu superior para alternar para o locatário no qual deseja registrar o aplicativo no menu Diretórios + assinaturas.

  3. Navegue até Identidade>Aplicativos>Registros do aplicativo.

  4. Selecione Novo registro.

  5. Insira um Nome para o aplicativo, como NewWebAPI1.

  6. Para Tipos de contas com suporte, selecione Contas somente neste diretório organizacional. Para obter informações sobre diferentes tipos de conta, selecione a opção Ajudar-me a escolher.

  7. Selecione Registrar.

    Captura de tela que mostra como inserir um nome e selecionar o tipo de conta.

  8. O painel Visão geral do aplicativo é exibido quando o registro é concluído. Registre a ID do Diretório (locatário) e a ID do aplicativo (cliente) a ser usada no código-fonte do aplicativo.

    Captura de tela que mostra os valores do identificador na página de visão geral.

Observação

Os Tipos de conta com suporte podem ser alterados referindo-se a Modificar as contas suportadas por um aplicativo.

Expor uma API

Depois que a API for registrada, você poderá configurar sua permissão definindo os escopos que a API expõe aos aplicativos cliente. Os aplicativos cliente solicitam permissão para executar operações passando um token de acesso junto com suas solicitações para a API Web protegida. A API Web executará a operação solicitada somente se o token de acesso recebido contiver os escopos necessários.

  1. Em Gerenciar, selecione Expor uma API>Adicionar um escopo. Se solicitado, aceite o URI da ID do aplicativo (api://{clientId}) proposto selecionando Salvar e continuar. O {clientId} será o valor registrado na página Visão geral. Em seguida, insira as informações a seguir:

    1. Para Nome do escopo, insira Forecast.Read.
    2. Para Quem pode consentir, verifique se a opção Administradores e usuários está selecionada.
    3. Na caixa Nome de exibição do consentimento do administrador, insira Read forecast data.
    4. Na caixa Descrição do consentimento do administrador, insira Allows the application to read weather forecast data.
    5. Na caixa Nome de exibição do consentimento do usuário, insira Read forecast data.
    6. Na caixa Descrição do consentimento do usuário, insira Allows the application to read weather forecast data.
    7. Verifique se o Estado está definido como Habilitado.
  2. Selecione Adicionar escopo. Se o escopo tiver sido inserido corretamente, ele será listado no painel Expor uma API.

    Captura de tela que mostra os valores de campo ao adicionar o escopo a uma API.

Clonar ou baixar o aplicativo de exemplo

Para obter o aplicativo de exemplo, você pode cloná-lo do GitHub ou baixá-lo como um arquivo .zip.

  • Para clonar o exemplo, abra um prompt de comando e navegue até onde deseja criar o projeto e insira o seguinte comando:

    git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
    
  • Baixar o arquivo .zip. Extraia-o para um caminho de arquivo em que o comprimento do nome seja menor que 260 caracteres.

Configurar o aplicativo de exemplo do ASP.NET Core

  1. No IDE, abra a pasta do projeto, ms-identity-docs-code-dotnet/web-api, que contém o exemplo.

  2. Abra o arquivo appsettings.json, que contém o seguinte trecho de código:

    {
      "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "Enter the tenant ID obtained from the Microsoft Entra admin center",
        "ClientId": "Enter the client ID obtained from the Microsoft Entra admin center",
        "Scopes": "Forecast.Read"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*"
    }
    

    Localize o seguinte key:

    • ClientId – O identificador do aplicativo, também conhecido como o cliente. Substitua o texto value entre aspas pela ID do aplicativo (cliente) que foi registrada anteriormente na página Visão geral do aplicativo registrado.
    • TenantId – O identificador do locatário em que o aplicativo está registrado. Substitua o texto value entre aspas pelo valor da ID do Diretório (locatário) que foi registrado anteriormente na página Visão geral do aplicativo registrado.

Executar o aplicativo de exemplo

  1. Execute o comando a seguir para iniciar o aplicativo:

    dotnet run
    
  2. Uma saída como a seguinte amostra é exibida:

    ...
    info: Microsoft.Hosting.Lifetime[14]
          Now listening on: http://localhost:{port}
    ...
    

    Registre o número da porta no URL http://localhost:{port}.

  3. Para verificar se o ponto de extremidade está protegido, atualize o URL base no seguinte comando cURL para corresponder ao que você recebeu na etapa anterior e execute o comando:

    curl -X GET https://localhost:5001/weatherforecast -ki
    

    A resposta esperada é 401 Não autorizado com saída semelhante a:

    user@host:~$ curl -X GET https://localhost:5001/weatherforecast -ki
    HTTP/2 401
    date: Fri, 23 Sep 2023 23:34:24 GMT
    server: Kestrel
    www-authenticate: Bearer
    content-length: 0
    

Próximas etapas

Prossiga para o próximo artigo para saber como chamar a API Web protegida usando cURL.