Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

448
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda