Partilhar via


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

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

Bibliotecas da Microsoft que suportam aplicações Web

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

Linguagem / framework Projeto em
GitHub
Pacote Como obter
começar
Iniciar sessão de utilizadores Aceder a APIs Web Geralmente disponível (GA) ou
Pré-visualizaçãopública 1
.NET MSAL.NET Microsoft.Identity.Client A biblioteca não pode solicitar tokens de ID para entrada do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
.NET Microsoft.IdentityModel Microsoft.IdentityModel A biblioteca não pode solicitar tokens de ID para entrada do usuário.2 A biblioteca não pode solicitar tokens de acesso para APIs da Web protegidas.2 GA
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Início rápido A biblioteca pode solicitar tokens de ID para entrar no 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 entrar no 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 entrar no usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
Node.js Nó MSAL msal-nó Início rápido A biblioteca pode solicitar tokens de ID para entrar no 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 entrar no 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 entrar no 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 aplicam-se às bibliotecas na Pré-visualização Pública.

(2) A biblioteca Microsoft.IdentityModel apenas valida tokens - não pode solicitar ID ou tokens de acesso.

Selecione o separador que corresponde à plataforma em que está interessado:

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

Consulte este tutorial para obter detalhes completos da implementação.

Arquivos de configuração

Os aplicativos Web que entram em 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 a nuvem pública do Azure
    • https://login.microsoftonline.us/ para o Azure US government
    • https://login.microsoftonline.de/ para Microsoft Entra Alemanha
    • https://login.partner.microsoftonline.cn/common para Microsoft Entra China operado pela 21Vianet
  • A audiência no ID do locatário. As opções variam dependendo se seu aplicativo é locatário único ou multilocatário.
    • O GUID do locatário obtido do portal do Azure para entrar em usuários em sua organização. Você também pode usar um nome de domínio.
    • organizations Para iniciar sessão de utilizadores em qualquer conta escolar ou profissional
    • common para iniciar sessão em utilizadores com qualquer conta escolar ou profissional ou conta pessoal da Microsoft
    • consumers para iniciar sessão em utilizadores apenas com uma conta pessoal Microsoft
  • A ID do cliente para seu aplicativo, conforme copiada do portal do Azure

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

No ASP.NET Core, essas configurações estão localizadas 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"
  }
}

No ASP.NET Core, outro arquivo (properties\launchSettings.json) 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 registrados na página Autenticação do seu aplicativo precisam corresponder a essas URLs. Para os dois arquivos de configuração anteriores, eles seriam https://localhost:44321/signin-oidc. A razão é que applicationUrl é http://localhost:3110, mas sslPort é especificado (44321). CallbackPath é /signin-oidc, tal como definido em appsettings.json.

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

Nota

SignedOutCallbackPath deve definir como portal ou o aplicativo para evitar conflitos durante a manipulação do evento.

Código de inicialização

As diferenças de código de inicialização dependem da plataforma. Para ASP.NET Core e ASP.NET, o login de usuários é delegado ao middleware OpenID Connect. O modelo ASP.NET ou ASP.NET Core gera aplicativos Web para o ponto de extremidade do Azure AD v1.0. Alguma configuração é necessária para adaptá-los à plataforma de identidade da Microsoft.

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

Nota

Se quiser começar diretamente com os novos modelos ASP.NET Core para a plataforma de identidade Microsoft, que aproveitam o Microsoft.Identity.Web, você pode baixar um pacote NuGet de visualização contendo modelos de projeto para .NET 5.0. Em seguida, uma vez instalado, você pode instanciar diretamente ASP.NET aplicativos Web Core (MVC ou Blazor). Consulte Modelos de projeto de aplicativo Web Microsoft.Identity.Web para obter detalhes. Esta é a abordagem mais simples, pois fará todos os seguintes passos por si.

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

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

Esse código usa o pacote NuGet herdado Microsoft.AspNetCore.Authentication.AzureAD.UI que é usado para criar um aplicativo Azure Ative Directory v1.0. Este artigo explica como criar um aplicativo Microsoft identity platform v2.0 que substitui esse código.

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

  2. Atualize o código para ConfigureServices que ele use os AddMicrosoftIdentityWebApp métodos 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 método em Startup.cs, habilite a Configure 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
    }
    

Nesse código:

  • O AddMicrosoftIdentityWebApp método de extensão é 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, é AzureAd.

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

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

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

Próximo passo