Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

449
Vistas
¿Por qué debo definir JwtBearerDefaults.AuthenticationScheme para mi atributo Autorizar siempre?

Tengo una muestra simple para la autenticación JWT que puede encontrar aquí

 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options =>

Como puede ver, he agregado JwtBearerDefaults.AuthenticationScheme al método Authentication dentro de Startup/ConfigureServices Servicios, por lo que debería poder usar el [Authorize] independiente de la siguiente manera

 [Authorize] public sealed class WeatherForecastController : BaseController { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };

pero no sé por qué no funciona! (He probado con Postman). Debo definirlo a través de AuthenticationSchemes .

 [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] public sealed class WeatherForecastController : BaseController { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };

¿Alguien puede guiarme sobre cómo puedo usar el atributo Authorize de forma independiente sin AuthenticationSchemes , especialmente cuando lo he definido dentro de ConfigureServices ? ¿Qué puse mal?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Tu código no tiene app.UseAuthentication() incluido. Eso significa que no hay un middleware de autenticación.

El esquema de autenticación predeterminado solo lo utiliza el middleware de autenticación para autenticar automáticamente la solicitud y crear el principal actual. Cuando usa [Authorize] solo, los esquemas de autenticación no están configurados y los filtros de autorización no funcionarán. El filtro creado a partir de ese IAuthorizeData ( AuthorizeAttribute es un IAuthorizeData ) es un AuthorizeFilter y esto requiere que los esquemas se establezcan explícitamente.

Es por eso que el otro [Authorize(...)] con algún esquema establecido funciona pero no el [Authorize] .

Por lo tanto, debe usar el middleware de autenticación para usar [Authorize] convenientemente sin tener que especificar los esquemas.

AuthorizeFilter usará IPolicyEvaluator internamente para autenticar la solicitud, aquí está la implementación predeterminada de PolicyEvaluator.AuthenticateAsync : puede ver que verifica la disponibilidad de AuthenticationSchemes .

over 4 years ago · Santiago Trujillo Denunciar

0

En .NET 5, puede configurar de la siguiente manera:

Agregue JwtBearerDefaults.AuthenticationScheme como cadena de esquema predeterminada en AddJwtBearer

 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, jwt => { jwt.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, .... ; });

Usar en Configurar (en caso de usar Rol también)

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

Y luego puede usar el atributo [Autorizado] como predeterminado

 [ApiController] [Route("api/data")] [Authorize] public class DataController : ControllerBase
over 4 years ago · Santiago Trujillo Denunciar

0

También existe un conflicto entre los métodos AddIdentityCore() y AddIdentity(). Si usa AddIdentity, usa autenticación basada en cookies, por lo que JWT no funciona si no escribe [Authorize (AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] explícitamente. Cambié mi inicio como se muestra a continuación y ahora funciona con [Autorizar] en .Net 6. Estoy usando clases personalizadas tanto para el usuario como para el rol.

 services.AddIdentityCore<AppUser>(x => { x.Password.RequireDigit = false; x.Password.RequiredLength = 4; x.Password.RequireLowercase = false; x.Password.RequireNonAlphanumeric = false; x.Password.RequireUppercase = false; }) .AddRoles<AppRole>() .AddEntityFrameworkStores<DBContext>();
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda