Aplicativo Web que registra usuários: Configuração de código

Este artigo descreve como configurar o código para um aplicativo Web que registra usuários.

Bibliotecas Microsoft com suporte a aplicativos Web

As seguintes bibliotecas da Microsoft são usadas para proteger um aplicativo Web (e uma API Web):

Idioma / estrutura Projeto em
GitHub
Pacote Introdução
iniciado
Conectar usuários Acessar APIs da Web Geralmente disponíveis (GA) ou
Visualização pública1
.NET MSAL.NET Microsoft.Identity.Client A biblioteca não pode solicitar tokens de ID para login do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
.NET Microsoft.IdentityModel Microsoft.IdentityModel Library cannot request ID tokens for user sign-in.2 Library cannot request access tokens for protected web APIs.2 GA
ASP.NET Core ASP.NET Core Microsoft.AspNetCore.Authentication Início rápido A biblioteca pode solicitar tokens de ID para entrada do usuário. A biblioteca não pode solicitar tokens de acesso para APIs da Web protegidas. GA
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Início rápido A biblioteca pode solicitar tokens de ID para entrada do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
Java MSAL4J msal4j Início rápido A biblioteca pode solicitar tokens de ID para entrada do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Tutorial A biblioteca pode solicitar tokens de ID para entrada do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
Node.js Nó MSAL msal-node Início rápido A biblioteca pode solicitar tokens de ID para entrada do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
Python MSAL Python msal A biblioteca pode solicitar tokens de ID para entrada do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
Python identidade identidade Início rápido A biblioteca pode solicitar tokens de ID para entrada do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. --

(1) Os Termos de Licença Universal para Serviços Online se aplicam a bibliotecas em Visualização Pública.

(2) Somente a biblioteca Microsoft.IdentityModelvalida os tokens; ela não pode solicitar ID ou acessar os tokens.

Selecione a guia que corresponde à plataforma em que você está interessado:

Os trechos de código neste artigo e os seguintes são extraídos do tutorial incremental de aplicativo Web em ASP.NET Core, capítulo 1.

Se desejar, consulte esse tutorial para obter detalhes completos sobre a implementação.

Arquivos de configuração

Os aplicativos Web que registram usuários usando a plataforma de identidade da Microsoft são configurados por meio de arquivos de configuração. Esses arquivos devem especificar os seguintes valores:

  • A instância de nuvem, se você quiser que seu aplicativo seja executado em nuvens nacionais, por exemplo. As diferentes opções incluem;
    • https://login.microsoftonline.com/ para nuvem pública Azure
    • https://login.microsoftonline.us/ para governo dos EUA do Azure
    • https://login.microsoftonline.de/ para o Microsoft Entra Alemanha
    • https://login.partner.microsoftonline.cn/common para o Microsoft Entra China operado pela 21Vianet
  • O público na ID do locatário. As opções variam dependendo de seu aplicativo ser locatário único ou multilocatário.
    • O GUID de locatário obtido do portal do Azure para conectar usuários em sua organização. Você também pode usar um nome de domínio.
    • organizations para conectar usuários em qualquer conta corporativa ou de estudante
    • common para conectar usuários com qualquer conta corporativa ou de estudante ou Microsoft conta pessoal
    • consumers para conectar usuários com apenas uma conta pessoal Microsoft
  • A ID do cliente para seu aplicativo, conforme copiado do portal do Azure

Você também pode ver referências à autoridade, uma concatenação dos valores da instância e da ID do locatário.

No ASP.NET Core, essas configurações estão no arquivo appsettings.json, na seção "Microsoft Entra ID".

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "[Enter the tenantId here]",

    // Client ID (application ID) obtained from the Azure portal
    "ClientId": "[Enter the Client Id here]",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-oidc"
  }
}

Em ASP.NET Core, outro arquivo (properties\launchSettings.jsem) contém a URL (applicationUrl) e a porta TLS/SSL (sslPort) para seu aplicativo e vários perfis.

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:3110/",
      "sslPort": 44321
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "webApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:3110/"
    }
  }
}

No portal do Azure, os URIs de redirecionamento que você registra na página de autenticação para seu aplicativo precisam corresponder a essas URLs. Para os dois arquivos de configuração anteriores, eles seriam https://localhost:44321/signin-oidc. O motivo é que applicationUrl é http://localhost:3110, mas sslPort é especificado (44321). CallbackPath é /signin-oidc, conforme definido em appsettings.json.

Da mesma forma, o URI de saída seria definido como https://localhost:44321/signout-oidc.

Observação

SignedOutCallbackPath deve ser definido como portal ou aplicativo para evitar conflitos ao manipular o evento.

Código de inicialização

As diferenças no código de inicialização dependem da plataforma. Para ASP.NET Core e ASP.NET, o registro de usuários é delegados para o middleware OpenID Connect. O modelo ASP.NET ou ASP.NET Core gera aplicativos Web para o ponto de extremidade do Azure AD v1.0. Algumas configurações são necessárias para adaptá-los à plataforma Microsoft Identity.

Aplicativo Web em ASP.NET Core (e APIs Web), o aplicativo é protegido porque você tem um Authorize atributo nos controladores ou nas ações do controlador. Esse atributo verifica se o usuário está autenticado. Antes do lançamento do .NET 6, a inicialização do código ficava no arquivo Startup.cs. Novos projetos do ASP.NET Core com o .NET 6 não mais contêm um arquivo Startup.cs. O arquivo Program.cs está tomando seu lugar. O restante deste tutorial pertence ao .NET 5 ou inferior.

Observação

Se você quiser começar diretamente com os novos modelos ASP.NET Core para plataforma de identidade da Microsoft, que utilizam o Microsoft.Identity.Web, você pode baixar um pacote NuGet de visualização contendo modelos de projeto para .NET 5.0. Depois, uma vez instalado, você pode instanciar diretamente aplicativo Web em ASP.NET Core (MVC ou Blazor). Consulte modelos de aplicativo Web Microsoft.Identity.Web para mais detalhes. Essa é a abordagem mais simples, pois fará todas as etapas abaixo para você.

Se preferir iniciar seu projeto com o projeto Web padrão em ASP.NET Core no Visual Studio ou usando dotnet new mvc --auth SingleOrg ou dotnet new webapp --auth SingleOrg, você verá um código semelhante ao seguinte:

 services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
         .AddAzureAD(options => Configuration.Bind("AzureAd", options));

Esse código usa o pacote NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI herdado que é usado para criar um aplicativo do Azure Active Directory v1.0. Este artigo explica como criar um aplicativo v2.0 da plataforma de identidade da Microsoft que substitui esse código.

  1. Adicione os pacotes NuGet Microsoft.Identity.Web e Microsoft.Identity.Web.UI ao seu projeto. Remova o pacote NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI, se ele estiver presente.

  2. Atualize o código no ConfigureServices para que ele use os métodos AddMicrosoftIdentityWebApp e AddMicrosoftIdentityUI.

    public class Startup
    {
     ...
     // This method gets called by the runtime. Use this method to add services to the container.
     public void ConfigureServices(IServiceCollection services)
     {
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
             .AddMicrosoftIdentityWebApp(Configuration, "AzureAd");
    
      services.AddRazorPages().AddMvcOptions(options =>
      {
       var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
       options.Filters.Add(new AuthorizeFilter(policy));
      }).AddMicrosoftIdentityUI();
    
  3. No Configure método em Startup.cs, habilite a autenticação com uma chamada para app.UseAuthentication(); e app.MapControllers();.

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
     // more code here
     app.UseAuthentication();
     app.UseAuthorization();
    
     app.MapRazorPages();
     app.MapControllers();
     // more code here
    }
    

Neste código:

  • O método de extensão AddMicrosoftIdentityWebApp é definido em Microsoft.Identity.Web, que;

    • Configura opções para ler o arquivo de configuração (aqui na seção "Microsoft Entra ID")
    • Configura as opções do OpenID Connect para que a autoridade seja a plataforma de identidade da Microsoft.
    • Valida o emissor do token.
    • Garante que as declarações correspondentes ao nome sejam mapeadas a partir da preferred_username declaração no token de ID.
  • Além do objeto de configuração, você pode especificar o nome da seção de configuração ao chamar AddMicrosoftIdentityWebApp. Por padrão, ele é AzureAd.

  • AddMicrosoftIdentityWebApp tem outros parâmetros para cenários avançados. Por exemplo, rastrear eventos de middleware do OpenID Connect pode ajudá-lo a solucionar problemas de seu aplicativo Web se a autenticação não funcionar. Definir o parâmetro opcional subscribeToOpenIdConnectMiddlewareDiagnosticsEvents para true mostrará como as informações são processadas pelo conjunto de middleware ASP.NET Core à medida que ele progride da resposta HTTP para a identidade do usuário em HttpContext.User.

  • O AddMicrosoftIdentityUI método de extensão é definido em Microsoft.Identity.Web.UI. Ele fornece um controlador padrão para manipular a entrada e saída.

Para obter mais informações sobre como o Microsoft.Identity.Web permite que você crie aplicativos Web, consulte Aplicativos Web no microsoft-identity-web.

Próxima etapa