Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: Locatários de trabalho
Locatários externos (saiba mais)
Este artigo descreve como configurar o código para uma aplicação web que faz login de utilizadores.
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 / estrutura | Projeto sobre GitHub |
Pacote | Como obter começar |
Iniciar sessão de utilizadores | Aceder a APIs Web | Geralmente disponível (GA) ou Prévizualização pública1 |
---|---|---|---|---|---|---|
.NET | MSAL.NET | Microsoft.Identity.Client | — |
![]() |
![]() |
Assembleia Geral |
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — |
![]() |
![]() |
Assembleia Geral |
ASP.NET Núcleo | Microsoft.Identity.Web | Microsoft.Identity.Web | Início rápido |
![]() |
![]() |
Assembleia Geral |
Java | MSAL4J | MSAL4J | Início rápido |
![]() |
![]() |
Assembleia Geral |
Primavera | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | Tutoriais |
![]() |
![]() |
Assembleia Geral |
Node.js | Nó MSAL | msal-node | Início rápido |
![]() |
![]() |
Assembleia Geral |
Python | MSAL Python | MSAL | — |
![]() |
![]() |
Assembleia Geral |
Python | identidade | identidade | Início rápido |
![]() |
![]() |
-- |
(1)Os Termos de Licença Universal para Serviços Online aplicam-se às bibliotecas na versão de 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
-
- O público no ID do locatário. As opções variam dependendo se seu aplicativo é locatário único ou multilocatário.
- O GUID do inquilino obtido do portal do Azure para autenticar utilizadores na sua organização. Você também pode usar um nome de domínio.
-
organizations
para iniciar sessão de utilizadores em qualquer conta de trabalho ou escolar -
common
para que os utilizadores iniciem sessão com qualquer conta laboral, escolar ou pessoal da Microsoft -
consumers
para iniciar sessão apenas em utilizadores 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 dos valores de instância e 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 ser definido como o portal ou a aplicação para evitar conflitos ao manipular o 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 aplicações web do ASP.NET Core (e APIs da web), a aplicação é protegida porque há um atributo Authorize
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 instalada, poderá diretamente instanciar aplicações web ASP.NET 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 em
ConfigureServices
para que utilize 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 método
Configure
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 }
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.