EAC.Infrastructure.Security 0.1.0-rc.4

This is a prerelease version of EAC.Infrastructure.Security.
dotnet add package EAC.Infrastructure.Security --version 0.1.0-rc.4
                    
NuGet\Install-Package EAC.Infrastructure.Security -Version 0.1.0-rc.4
                    
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="EAC.Infrastructure.Security" Version="0.1.0-rc.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EAC.Infrastructure.Security" Version="0.1.0-rc.4" />
                    
Directory.Packages.props
<PackageReference Include="EAC.Infrastructure.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 EAC.Infrastructure.Security --version 0.1.0-rc.4
                    
#r "nuget: EAC.Infrastructure.Security, 0.1.0-rc.4"
                    
#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 EAC.Infrastructure.Security@0.1.0-rc.4
                    
#: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=EAC.Infrastructure.Security&version=0.1.0-rc.4&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=EAC.Infrastructure.Security&version=0.1.0-rc.4&prerelease
                    
Install as a Cake Tool

EAC.Infrastructure.Security

Desde 2026-10-09, Native AOT queda fuera del alcance por decisión del usuario. No se declara compatibilidad ni se exige su gate. Las referencias históricas no constituyen soporte vigente; build y tests ordinarios siguen siendo obligatorios.

Repositorio propietario del NuGet EAC.Infrastructure.Security.

Estado actual: alcance hasta RC completado con 0.1.0-rc.3 publicado en NuGet.org, incluida la corrección de composición de SEC-011. SEC-012 permanece pendiente antes de cualquier promoción estable.

Instalación y configuración

<PackageReference Include="EAC.Infrastructure.Security" Version="0.1.0-rc.3" />

El registro básico no exige configuración ambiental ni activa un handler de autenticación. Se mantiene para adaptadores no HTTP y pruebas:

services.AddEacSecurity(
    claims => claims.MapSubject("sub").MapClientId("client_id"),
    capabilities => capabilities.Add("sample.order.read"));

El overload declarativo con IConfiguration registra el handler JWT Bearer oficial y enlaza claims, catálogo, traducciones y políticas desde Eac:Security, sin callbacks específicos del servicio:

services.AddEacSecurity(builder.Configuration);

Configuración completa con valores seguros predeterminados:

{
  "Eac": {
    "Security": {
      "DefaultScheme": "Bearer",
      "Authority": "https://identity.example",
      "Audience": "orders-api",
      "Issuer": "https://identity.example",
      "ValidateIssuer": true,
      "ValidateAudience": true,
      "ValidateLifetime": true,
      "ValidateSignature": true,
      "RequireHttpsMetadata": true,
      "ValidTokenTypes": [ "at+jwt" ],
      "Capabilities": [ "sample.order.read" ],
      "ClaimMappings": {
        "SubjectClaimTypes": [ "sub" ],
        "ClientIdClaimTypes": [ "azp", "client_id" ],
        "ScopeClaimTypes": [ "scope" ],
        "JsonRoleMappings": [
          { "ClaimType": "resource_access", "Path": [ "orders-api", "roles" ] }
        ],
        "TrustedRoleSources": [
          { "ClientIds": [ "orders-client", "orders-batch" ] }
        ]
      },
      "RoleCapabilityMappings": [
        { "Value": "order-reader", "Capability": "sample.order.read" }
      ],
      "EndpointPolicies": [
        {
          "Name": "orders-read",
          "RoutePattern": "/orders/{id:guid}",
          "Methods": [ "GET" ],
          "Capabilities": [ "sample.order.read" ],
          "MatchMode": "AllOf"
        }
      ]
    }
  }
}

Equivalencia mediante variables de entorno:

Eac__Security__DefaultScheme=Bearer
Eac__Security__Authority=https://identity.example
Eac__Security__Audience=orders-api
Eac__Security__Issuer=https://identity.example
Eac__Security__ValidateIssuer=true
Eac__Security__ValidateAudience=true
Eac__Security__ValidateLifetime=true
Eac__Security__ValidateSignature=true
Eac__Security__RequireHttpsMetadata=true
Opción Predeterminado Obligatoria al configurar Regla
DefaultScheme Bearer no no vacío
Authority — sí URI absoluta; HTTPS cuando RequireHttpsMetadata=true
Audience — sí no vacío
Issuer — sí no vacío
ValidateIssuer true sí no admite desactivación
ValidateAudience true sí no admite desactivación
ValidateLifetime true sí no admite desactivación
ValidateSignature true sí no admite desactivación
RequireHttpsMetadata true no solo puede desactivarse en pruebas locales controladas
ValidTokenTypes [] no allowlist opcional; vacía delega el tipo al handler y mantiene las demás validaciones
Capabilities [] sí en registro declarativo catálogo único y no vacío
ClaimMappings vacío sí en registro declarativo subjects, clientes y fuentes de rol explícitas
*CapabilityMappings [] no valores únicos y destinos declarados en el catálogo
EndpointPolicies [] no patrón y verbo exactos; sin catch-all, duplicados ni requisitos desconocidos

Una sección incompleta o insegura impide el startup. Los cambios requieren reiniciar el proceso. Una configuración programática proporcionada al final del registro tiene precedencia sobre appsettings y variables de entorno:

services.AddEacSecurity(
    builder.Configuration,
    ConfigureClaims,
    ConfigureCapabilities,
    options => options.Audience = "orders-api-v2");

Authority, Audience e Issuer no son secretos. Tokens, claves privadas, client secrets y credenciales pertenecen al handler/proveedor oficial y deben obtenerse desde un almacén externo; este paquete nunca los recibe ni almacena. El overload con callbacks permanece para compatibilidad y para composición programática. En el overload declarativo, capabilities, claim types, rutas JSON, fuentes confiables y traducciones role/scope/permission se validan al inicio. Issuer y Audience de una fuente pueden omitirse para heredar los valores raíz; cada ClientId sigue siendo obligatorio y único.

Los roles de proveedor solo se traducen a capacidades cuando la fuente declara explícitamente claim type, issuer, audience y client/resource esperados:

services.AddEacSecurity(
    claims => claims
        .MapSubject("sub")
        .MapClientId("client_id", "azp")
        .MapRoles("roles")
        .MapJsonArrayRoles("resource_access", "orders-api", "roles")
        .AcceptRoleSource("https://identity.example", "orders-api", "orders-client")
        .FromRole("order-operator", "sample.order.read"),
    capabilities => capabilities.Add("sample.order.read"));

La ruta HTTP aplica la policy sin repetir capacidades en cada operación:

var orders = endpoints.MapGroup("/orders")
    .RequireConfiguredAuthorization(
        endpoints.ServiceProvider.GetRequiredService<EndpointAuthorizationMap>());

app.UseAuthentication();
app.UseEacExecutionIdentity();
app.UseAuthorization();
app.ValidateEacEndpointAuthorization();

MapJsonArrayRoles es un adaptador genérico por ruta JSON; el paquete no fija resource_access, un cliente ni nombres de roles. La fuente aceptada continúa exigiendo issuer, audience y client/resource exactos.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0-rc.4 65 10/23/2026
0.1.0-rc.3 87 8/21/2026
0.1.0-rc.2 83 8/21/2026
0.1.0-rc.1 85 8/19/2026
0.1.0-beta.1 81 8/19/2026
0.1.0-alpha.3 73 8/19/2026
0.1.0-alpha.2 82 8/19/2026