Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: Locatários da força de trabalho
Locatários externos (saiba mais)
Neste tutorial, você adicionará os elementos de autenticação e autorização a um aplicativo Web ASP.NET Core. No tutorial anterior, você criou um projeto do ASP.NET Core e o configurou para autenticação.
Neste tutorial, você:
- Adicionar elementos de autorização e autenticação ao código
- Habilitar a exibição de declarações em um token de ID
- Adicione as experiências de entrada e saída
Pré-requisitos
- Conclusão dos pré-requisitos e etapas no Tutorial: Configurar um aplicativo Web ASP.NET Core que autentica os usuários.
Adicionar elementos de autenticação e autorização
Os arquivos HomeController.cs e Program.cs precisam ser modificados para adicionar os elementos de autenticação e autorização ao aplicativo Web ASP.NET Core. Isso inclui o gerenciamento da página inicial, a adição de namespaces corretos e a configuração do login.
Adicionar autorização a HomeController.cs
A home page do aplicativo precisa ter a capacidade de autorizar o usuário. O Microsoft.AspNetCore.Authorization
namespace fornece as classes e interfaces para implementar a autorização para o aplicativo Web. O [Authorize]
atributo é usado para especificar que somente usuários autenticados podem usar o aplicativo Web.
Em seu aplicativo Web, abra Controladores/HomeController.cs e adicione o seguinte snippet à parte superior do arquivo:
using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
Adicione o
[Authorize]
atributo acima da definição deHomeController
classe, conforme mostrado no snippet a seguir:[Authorize] public class HomeController : Controller { ...
Adicionar elementos de autenticação e autorização a Program.cs
O arquivo Program.cs é o ponto de entrada do aplicativo e precisa ser modificado para adicionar autenticação e autorização ao aplicativo Web. Os serviços precisam ser adicionados para permitir que o aplicativo use as configurações definidas em appsettings.json para autenticação.
Adicione os namespaces a seguir à parte superior do arquivo.
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.Authorization; using Microsoft.Identity.Web; using Microsoft.Identity.Web.UI; using System.IdentityModel.Tokens.Jwt;
Em seguida, adicione o serviço de autenticação de aplicativo Web do Microsoft Identity, que configura o aplicativo para usar o Microsoft Identity para autenticação.
// Add services to the container. builder.Services.AddControllersWithViews(); // This is required to be instantiated before the OpenIdConnectOptions starts getting configured. // By default, the claims mapping will map claim names in the old format to accommodate older SAML applications. // This flag ensures that the ClaimsIdentity claims collection will be built from the claims in the token JwtSecurityTokenHandler.DefaultMapInboundClaims = false; // Sign-in users with the Microsoft identity platform builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); builder.Services.AddControllersWithViews(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); }).AddMicrosoftIdentityUI();
Em seguida, o middleware precisa ser configurado para habilitar os recursos de autenticação. Substitua o restante do código pelo snippet a seguir.
var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
Adicione a experiência de entrada e saída
A interface do usuário precisa ser atualizada para fornecer uma experiência mais amigável para entrar e sair. Esta seção mostra como criar um novo arquivo que exibe itens de navegação com base no status de autenticação do usuário. O código lê as declarações do token de ID para verificar se o usuário está autenticado e usa User.Claims
para extrair as declarações do token de ID.
Crie um novo arquivo em Exibições/Compartilhado e dê a ele o nome _LoginPartial.cshtml.
Abra o arquivo e adicione o seguinte código para adicionar a experiência de entrada e saída:
@using System.Security.Principal <ul class="navbar-nav"> @if (User.Identity is not null && User.Identity.IsAuthenticated) { <li class="nav-item"> <span class="nav-link text-dark">Hello @User.Claims.First(c => c.Type == "preferred_username").Value!</span> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a> </li> } else { <li class="nav-item"> <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a> </li> } </ul>
Abra Views/Shared/_Layout.cshtml e adicione uma referência a
_LoginPartial
criada na etapa anterior. Coloque isso perto do final danavbar-nav
classe, conforme mostrado no seguinte snippet:<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a> </li> </ul> <partial name="_LoginPartial" /> </div>
Usar domínio de URL personalizado (opcional)
Aplica-se a: Locatários de força de trabalho
Locatários externos (saiba mais)
Use um domínio personalizado para marcar totalmente a URL de autenticação. Do ponto de vista do usuário, os usuários permanecem em seu domínio durante o processo de autenticação, em vez de serem redirecionados para o nome de domínio ciamlogin.com .
Siga estas etapas para usar um domínio personalizado:
Use as etapas mencionadas em Habilitar domínios de URL personalizados para aplicativos de locatários externos para habilitar domínios de URL personalizados para seu locatário externo.
Abra appsettings.json arquivo:
- Atualize os parâmetros
Instance
eTenantId
para uma propriedadeAuthority
. - Adicione a seguinte cadeia de caracteres ao valor de
Authority
parahttps://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here
. SubstituaEnter_the_Custom_Domain_Here
pelo domínio de URL personalizado eEnter_the_Tenant_ID_Here
pela ID do locatário. Se você não tiver sua ID de locatário, saiba como ler os detalhes do locatário. - Adicione uma
knownAuthorities
propriedade com um valor [Enter_the_Custom_Domain_Here].
- Atualize os parâmetros
Depois de fazer as alterações no arquivo appsettings.json, se o domínio de URL personalizado for login.contoso.com e sua ID de locatário for aaaabbbb-0000-cccc-1111-dddd2222eeee, o arquivo deverá ser semelhante ao seguinte trecho de código:
{
"AzureAd": {
"Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
"ClientId": "Enter_the_Application_Id_Here",
"ClientCertificates": [
{
"SourceType": "StoreWithThumbprint",
"CertificateStorePath": "CurrentUser/My",
"CertificateThumbprint": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
}
],
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc",
"KnownAuthorities": ["login.contoso.com"]
...