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

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

Pré-requisitos

Registar a aplicação e os identificadores de registo

Gorjeta

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

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

  1. Entre 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 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é Registros do aplicativo Identity>Applications>.

  4. Selecione Novo registo.

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

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

  7. Selecione Registar.

    Captura de ecrã que mostra como introduzir um nome e selecionar o tipo de conta.

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

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

Nota

Os tipos de conta suportados podem ser alterados consultando 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 da Web protegida. Em seguida, a API da Web executa a operação solicitada somente se o token de acesso que recebe contiver os escopos necessários.

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

    1. Em Nome do escopo, digite Forecast.Read.
    2. Para Quem pode consentir, verifique se a opção Administradores e usuários está selecionada.
    3. Na caixa Nome para exibição do consentimento do administrador, digite Read forecast data.
    4. Na caixa Descrição do consentimento do administrador, digite Allows the application to read weather forecast data.
    5. Na caixa Nome de exibição do consentimento do usuário, digite Read forecast data.
    6. Na caixa Descrição do consentimento do utilizador, introduza 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.

Clone ou baixe 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 digite o seguinte comando:

    git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
    
  • Transfira o ficheiro .zip. Extraia-o para um caminho de arquivo onde o comprimento do nome é inferior a 260 caracteres.

Configurar o aplicativo de exemplo ASP.NET Core

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

  2. Abrir appsettings.json arquivo, 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": "*"
    }
    

    Encontre o seguinte key:

    • ClientId - O identificador da aplicação, também referido como o cliente. Substitua o value texto entre aspas pelo ID do aplicativo (cliente) que foi gravado anteriormente na página Visão geral do aplicativo registrado.
    • TenantId - O identificador do inquilino onde a aplicação está registada. Substitua o value texto entre aspas pelo valor de ID do diretório (locatário) que foi registrado anteriormente na página Visão geral do aplicativo registrado.

Executar o exemplo de aplicação

  1. Execute o seguinte comando para iniciar o aplicativo:

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

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

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

  3. Para verificar se o ponto de extremidade está protegido, use o seguinte comando cURL no Bash para enviar uma solicitação HTTP GET não autenticada no Bash:

    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