Partilhar via


Tutorial: Configurar um aplicativo Web ASP.NET Core para autorização e autenticação

Aplica-se a: círculo verde com um símbolo de marca de seleção branco que indica que o conteúdo a seguir se aplica aos locatários da força de trabalho. Locatários da força de trabalho Círculo verde com um símbolo de marca de seleção branco que indica que o conteúdo a seguir se aplica a locatários externos. Inquilinos externos (saiba mais)

Neste tutorial, você adiciona os elementos de autenticação e autorização a um aplicativo Web ASP.NET Core. No tutorial anterior, você criou um projeto 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 visualização de declarações em um token de ID
  • Adicionar as experiências de entrada e saída

Pré-requisitos

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 gerenciar a página inicial, adicionar namespaces corretos e configurar o login.

Adicionar autorização ao HomeController.cs

A página inicial do aplicativo precisa ter a capacidade de autorizar o usuário. O namespace Microsoft.AspNetCore.Authorization fornece as classes e interfaces para implementar a autorização para o aplicativo Web. O atributo [Authorize] é usado para especificar que apenas usuários autenticados podem usar o aplicativo Web.

  1. No seu aplicativo Web, abra Controllers/HomeController.cse adicione o seguinte trecho à parte superior do arquivo:

    using System.Diagnostics;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using dotnetcore_webapp.Models;
    
  2. Adicione o atributo [Authorize] acima da definição de classe HomeController, conforme mostrado no trecho a seguir:

    [Authorize]
    public class HomeController : Controller
    {
    ...
    

Adicionar elementos de autenticação e autorização ao 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 no appsettings.json para autenticação.

  1. 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;
    
  2. Em seguida, adicione o serviço de autenticação do aplicativo Web 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();
    
    
  3. Em seguida, o middleware precisa ser configurado para habilitar os recursos de autenticação. Substitua o restante do código pelo trecho 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();
    

Adicionar 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 entrada e saída. 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 de token de ID para verificar se o utilizador está autenticado e utiliza User.Claims para extrair declarações de token de ID.

  1. Crie um novo ficheiro no Views/Shared e dê-lhe o nome _LoginPartial.cshtml.

  2. 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>
    
  3. Abra Views/Shared/_Layout.cshtml e adicione uma referência a _LoginPartial criado na etapa anterior. Coloque isso perto do final da classe navbar-nav, conforme mostrado no seguinte trecho:

    <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: círculo verde com um símbolo de marca de seleção branco que indica que o conteúdo a seguir se aplica a locatários externos. Inquilinos 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 no 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:

  1. Use as etapas em Habilitar domínios de URL personalizados para aplicativos em locatários externos para habilitar o domínio de URL personalizado para o seu locatário externo.

  2. Abra appsettings.json arquivo:

    1. Atualize os parâmetros Instance e TenantId para uma propriedade Authority.
    2. Adicione a seguinte cadeia de caracteres ao valor Authority para https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here. Substitua Enter_the_Custom_Domain_Here pelo seu domínio de URL personalizado e Enter_the_Tenant_ID_Here pelo seu ID de inquilino. Se não tiver o seu ID de inquilino, saiba como ler os detalhes do seu inquilino.
    3. Adicione uma propriedade knownAuthorities com um valor [Enter_the_Custom_Domain_Here].

Depois de fazer as alterações no arquivo appsettings.json, se o seu domínio de URL personalizado é login.contoso.come o seu ID do locatário é aaaabbbb-0000-cccc-1111-dddd2222eeee, então o seu arquivo deverá ser semelhante ao seguinte trecho:

{
  "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"]
    ...

Próximo passo