Nuuvify.CommonPack.Security 2.9.0-preview.43

This is a prerelease version of Nuuvify.CommonPack.Security.
dotnet add package Nuuvify.CommonPack.Security --version 2.9.0-preview.43
                    
NuGet\Install-Package Nuuvify.CommonPack.Security -Version 2.9.0-preview.43
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Nuuvify.CommonPack.Security" Version="2.9.0-preview.43" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Nuuvify.CommonPack.Security" Version="2.9.0-preview.43" />
                    
Directory.Packages.props
<PackageReference Include="Nuuvify.CommonPack.Security" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Nuuvify.CommonPack.Security --version 2.9.0-preview.43
                    
#r "nuget: Nuuvify.CommonPack.Security, 2.9.0-preview.43"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Nuuvify.CommonPack.Security@2.9.0-preview.43
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Nuuvify.CommonPack.Security&version=2.9.0-preview.43&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Nuuvify.CommonPack.Security&version=2.9.0-preview.43&prerelease
                    
Install as a Cake Tool

Nuuvify.CommonPack.Security

Biblioteca de segurança para aplicações ASP.NET Core que centraliza setup de autenticação, autorização e acesso às claims do usuário autenticado.

O pacote principal reúne utilitários para cenários com JWT e OpenID, além de contratos usados pelos pacotes complementares Nuuvify.CommonPack.Security.JwtCredentials e Nuuvify.CommonPack.Security.JwtStore.Ef.

O que o pacote oferece

  • setup de autenticação JWT via AddSecuritySetup
  • setup complementar para fluxos OpenID via AddOpenIdSecuritySetup
  • handlers de autorização para políticas e validação por claims
  • helper IUserAuthenticated para leitura do usuário autenticado, claims e papéis
  • opções de token centralizadas em JwtTokenOptions
  • autenticação por API key via esquema ApiKey

Quando usar

Use este pacote quando a aplicação precisar:

  • validar tokens JWT emitidos por uma autoridade conhecida
  • configurar autenticação e autorização de forma padronizada no container de DI
  • acessar claims e informações do usuário atual sem espalhar dependência de HttpContext
  • integrar fluxos baseados em OpenID e transformação adicional de claims

Configuração JWT

O ponto de entrada principal para JWT é a extensão AddSecuritySetup.

using Nuuvify.CommonPack.Security.Jwt;

builder.Services.AddSecuritySetup(builder.Configuration);

Por padrão, o método lê a seção JwtTokenOptions, registra IUserAuthenticated, IHttpContextAccessor e configura JwtBearer com validação de emissor, audiência, chave de assinatura e expiração.

Exemplo de configuração

{
 "JwtTokenOptions": {
  "Issuer": "nuuvify-auth",
  "Audience": "nuuvify-api",
  "SecretKey": "uma-chave-com-pelo-menos-32-caracteres-seguros"
 }
}

Configuração OpenID

Para cenários OpenID, o pacote expõe AddOpenIdSecuritySetup, que registra os componentes necessários para autorização, transformação de claims e acesso ao usuário autenticado.

using Nuuvify.CommonPack.Security.JwtOpenId;

builder.Services.AddOpenIdSecuritySetup(builder.Configuration);

Esse setup complementa a infraestrutura de autenticação já existente na aplicação e adiciona os serviços auxiliares usados pelos handlers do pacote.

Configuração de API key

O esquema ApiKey pode ser registrado quando a aplicação precisa validar uma credencial em um header HTTP dedicado:

using Nuuvify.CommonPack.Security;

builder.Services.AddAuthentication(ApiKeyAuthenticationDefaults.AuthenticationScheme)
 .AddApiKeyAuthentication(options =>
 {
  options.HeaderName = "X-API-Key";
  options.ValidKeys = new[] { "valor-carregado-de-um-secret-manager" };
 });

O handler retorna NoResult quando o header não está presente e falha com uma mensagem genérica quando a credencial é inválida. A claim emitida identifica o header utilizado; o valor secreto nunca é copiado para claims, logs ou respostas.

Migração da API Legada

De Attribute ([ApiKey]) para Scheme (AddApiKeyAuthentication)

A implementação legada de atributo é mantida para compatibilidade, mas será removida em uma versão futura. As aplicações devem migrar para o novo esquema de autenticação baseado em ASP.NET Core AuthenticationScheme.

Código legado (deprecado)
[ApiKey(KeyName = new[] { "MyApiKey" })]
public class MyController : ControllerBase
{
    [HttpGet]
    public IActionResult Get() => Ok();
}

app.UseHttpRequestKeyVerifyMiddleware("x-api-key", StatusCodes.Status401Unauthorized);
Novo código (canônico)
builder.Services.AddAuthentication(ApiKeyAuthenticationDefaults.AuthenticationScheme)
    .AddApiKeyAuthentication(options =>
    {
        options.HeaderName = "X-API-Key";
        options.ValidKeys = new[] { "secret-key-from-vault" };
    });

builder.Services.AddAuthorization();

app.UseAuthentication();
app.UseAuthorization();

[Authorize(AuthenticationSchemes = ApiKeyAuthenticationDefaults.AuthenticationScheme)]
public class MyController : ControllerBase
{
    [HttpGet]
    public IActionResult Get() => Ok();
}
Período de transição

Durante a transição, o ApiKeyFilter (legado) registra dois claims ao mesmo tempo:

  • ApiKeyInfo (legado)
  • urn:nuuvify:security:api-key (canônico)

Isso permite que consumidores migrem gradualmente sem perder funcionalidade. A estratégia será removida em uma versão futura.

Integração com OpenAPI / Swagger

Para documentar endpoints protegidos por API key no Swagger/OpenAPI, registre o esquema na configuração de SwaggerGen da sua aplicação:

using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;

builder.Services.AddSwaggerGen(options =>
{
    var securityScheme = new OpenApiSecurityScheme
    {
        Name = "X-API-Key",
        Type = SecuritySchemeType.ApiKey,
        In = ParameterLocation.Header,
        Description = "Autenticação por chave de API"
    };

    options.AddSecurityDefinition("ApiKey", securityScheme);
    options.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        { securityScheme, new[] { ApiKeyAuthenticationDefaults.AuthenticationScheme } }
    });
});

A biblioteca Security não adiciona dependência de Swashbuckle para preservar a separação de responsabilidades: a biblioteca fornece o padrão de autenticação, enquanto a aplicação consumidora é responsável pela integração OpenAPI quando necessário.

Acesso ao usuário autenticado

O contrato IUserAuthenticated permite consultar o usuário atual, autenticação, claims e papéis sem espalhar leitura direta de HttpContext.

Exemplos comuns:

  • verificar se o usuário está autenticado
  • recuperar o login atual
  • ler uma claim específica
  • verificar pertença a papel ou grupo

JwtTokenOptions

JwtTokenOptions centraliza as opções usadas na validação e emissão de tokens. Entre os campos mais relevantes estão:

  • Issuer
  • Audience
  • SecretKey
  • NotBefore
  • ValidFor
  • Expiration

O pacote exige chave simétrica válida e trata tempo de expiração com ClockSkew zerado no setup JWT padrão.

Observações de segurança

  • mantenha SecretKey fora do código-fonte e prefira secret manager, vault ou configuração segura do ambiente
  • trate mudanças em emissor, audiência, claims obrigatórias e expiração como mudanças de contrato para consumidores
  • não enfraqueça validações de token sem teste explícito e análise de impacto
  • evite expor detalhes sensíveis de autenticação em logs e mensagens de erro

Pacotes relacionados

  • Nuuvify.CommonPack.Security.JwtCredentials: suporte complementar para credenciais JWT
  • Nuuvify.CommonPack.Security.JwtStore.Ef: persistência de dados de JWT com Entity Framework

Validação recomendada ao alterar este pacote

  • cenários de token válido e inválido
  • expiração e audiência incorreta
  • claims esperadas e autorização negada
  • ausência de vazamento de segredo ou detalhe sensível
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Nuuvify.CommonPack.Security:

Package Downloads
Nuuvify.CommonPack.Middleware

Middlewares e filtros customizados, deve ser baixado no projeto IoC. HandlingHeadersMiddleware - Inclui a versco da aplicacco e do assembly no header da request, tambcm loga o conteudo da request. GlobalHandleException - Captura e loga as exceptions de forma global. ValidateModelAttribute - Retorna os erros da ModelState de forma padronizada

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.9.0-preview.43 33 8/23/2026
2.8.0 140 8/11/2026
2.8.0-preview.42 42 8/23/2026
2.8.0-preview.39 59 8/7/2026
2.7.0 341 7/25/2026
2.7.0-preview.26072428 55 7/25/2026
2.7.0-preview.26072419 61 7/25/2026
2.7.0-preview.26072416 49 7/25/2026
2.7.0-preview.26072413 56 7/25/2026
2.7.0-preview.26072410 61 7/24/2026
2.7.0-preview.26072406 53 7/24/2026
2.7.0-preview.26072302 108 7/23/2026
2.5.4 364 6/26/2026
2.5.3 119 6/25/2026
2.5.2 225 6/24/2026
2.5.2-preview.26062502 73 6/25/2026
2.5.2-preview.26062402 78 6/24/2026
2.5.1 390 6/14/2026
2.5.1-preview.26061404 73 6/14/2026
2.5.0 466 6/6/2026
Loading failed

# Changelog - Nuuvify.CommonPack.Security

Todas as mudanças notáveis deste pacote serão documentadas neste arquivo.

O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-br/1.0.0/),
e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/spec/v2.0.0.html).

## [Não Lançado]

### Adicionado

- Validação de startup para header e credenciais do esquema de API key.
- Esquema de autenticação por API key com comparação em tempo constante.
- Registro de API key via `AddApiKeyAuthentication`.
- Claim canônica `urn:nuuvify:security:api-key` para autorização por esquema.

### Alterado

- A integração OpenAPI permanece responsabilidade da aplicação consumidora, sem dependência de Swashbuckle no pacote Security.

### Corrigido

### Removido

### Segurança

- impedir que a credencial validada seja materializada em claims

## [Sem versão registrada] - 2026-05-29

### Histórico

- Estrutura inicial do changelog padronizada para este pacote.