Compartilhar via


Proteger um ASP.NET Core Blazor Web App com a Autenticação do Windows

Este artigo descreve como proteger um Blazor Web App com a Autenticação do Windows usando um aplicativo de exemplo. Para obter mais informações, consulte Configurar a Autenticação do Windows no ASP.NET Core.

A especificação do aplicativo para o Blazor Web App:

Aplicativo de exemplo

Acesse o exemplo por meio da pasta de versão mais recente no Blazor repositório de exemplos com o link a seguir. O exemplo está na BlazorWebAppWinAuthServer pasta para .NET 9 ou posterior.

Exibir ou baixar código de exemplo (como baixar)

Configuração

O aplicativo de exemplo não requer configuração para ser executado localmente.

Quando implantado em um host, como o IIS, o aplicativo deve adotar a impersonação para ser executado na conta do usuário. Para obter mais informações, consulte Configurar a Autenticação do Windows no ASP.NET Core.

Código de aplicativo de exemplo

Inspecione o Program arquivo no aplicativo de exemplo para as chamadas à API a seguir.

AddAuthentication é chamado usando o esquema de autenticação NegotiateDefaults.AuthenticationScheme. AddNegotiate configura o AuthenticationBuilder para usar a autenticação Negociar (também conhecida como Windows, Kerberos ou NTLM), e o manipulador de autenticação oferece suporte ao Kerberos em servidores Windows e Linux:

builder.Services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
    .AddNegotiate();

AddAuthorization adiciona serviços de política de autorização. AuthorizationOptions.FallbackPolicy define a política de autorização de fallback, que é definida como a política padrão (AuthorizationOptions.DefaultPolicy). A política padrão requer que um usuário autenticado acesse o aplicativo:

builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});

AddCascadingAuthenticationState adiciona o estado de autenticação em cascata à coleção de serviços. Isso é equivalente a colocar um CascadingAuthenticationState componente na raiz da hierarquia de componentes do aplicativo:

builder.Services.AddCascadingAuthenticationState();

Uma política de autorização é adicionada para um SID (identificador de segurança) do Windows. O S-1-5-113 SID conhecido no exemplo a seguir indica que o usuário é uma conta local, que restringe a entrada de rede a contas locais em vez de "administrador" ou contas equivalentes:

builder.Services.AddAuthorizationBuilder()
    .AddPolicy("LocalAccount", policy =>
        policy.RequireClaim(
            "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid",
            "S-1-5-113"));   

A política de autorização é imposta pelo LocalAccountOnly componente.

Components/Pages/LocalAccountOnly.razor:

@page "/local-account-only"
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize("LocalAccount")]

<h1>Local Account Only</h1>

<p>
    You can only reach this page by satisfying the
    <code>LocalAccount</code> authorization policy.
</p>

O UserClaims componente lista as declarações do usuário, que incluem os identificadores de segurança do Windows (SIDs) do usuário.

Components/Pages/UserClaims.razor:

@page "/user-claims"
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]

<PageTitle>User Claims</PageTitle>

<h1>User Claims</h1>

@if (claims.Any())
{
    <ul>
        @foreach (var claim in claims)
        {
            <li><b>@claim.Type:</b> @claim.Value</li>
        }
    </ul>
}

@code {
    private IEnumerable<Claim> claims = [];

    [CascadingParameter]
    private Task<AuthenticationState>? AuthState { get; set; }

    protected override async Task OnInitializedAsync()
    {
        if (AuthState == null)
        {
            return;
        }

        var authState = await AuthState;
        claims = authState.User.Claims;
    }
}

Recursos adicionais