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 | — | GA | ||
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — | 2 | 2 | GA |
ASP.NET Core | ASP.NET Core | Microsoft.AspNetCore.Authentication | Início rápido | GA | ||
ASP.NET Core | Microsoft.Identity.Web | Microsoft.Identity.Web | Início rápido | GA | ||
Java | MSAL4J | msal4j | Início rápido | GA | ||
Spring | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | Tutorial | GA | ||
Node.js | Nó MSAL | msal-node | Início rápido | GA | ||
Python | MSAL Python | msal | GA | |||
Python | identidade | identidade | Início rápido | -- |
(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 Azurehttps://login.microsoftonline.us/
para governo dos EUA do Azurehttps://login.microsoftonline.de/
para o Microsoft Entra Alemanhahttps://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 estudantecommon
para conectar usuários com qualquer conta corporativa ou de estudante ou Microsoft conta pessoalconsumers
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.
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.Atualize o código no
ConfigureServices
para que ele use os métodosAddMicrosoftIdentityWebApp
eAddMicrosoftIdentityUI
.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();
No
Configure
método em Startup.cs, habilite a autenticação com uma chamada paraapp.UseAuthentication();
eapp.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 opcionalsubscribeToOpenIdConnectMiddlewareDiagnosticsEvents
paratrue
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 emHttpContext.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.