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 | — | 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-nó | 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 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 Azurehttps://login.microsoftonline.us/
para o Azure US governmenthttps://login.microsoftonline.de/
para Microsoft Entra Alemanhahttps://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 profissionalcommon
para iniciar sessão em utilizadores com qualquer conta escolar ou profissional ou conta pessoal da Microsoftconsumers
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.
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.Atualize o código para
ConfigureServices
que ele use osAddMicrosoftIdentityWebApp
métodos 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 método em Startup.cs, habilite a
Configure
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 }
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âmetrosubscribeToOpenIdConnectMiddlewareDiagnosticsEvents
opcional comotrue
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 noHttpContext.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.