Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Erro 500 quando token não é valido.

Quando o token é valido eu consigo acessar o recurso normalmente, mas caso contrário estou recebendo erro 500 ou invés do 404 mostrado no curso.

Segue o erro: System.InvalidOperationException: No authenticationScheme was specified, and there was no DefaultForbidScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action configureOptions). at Microsoft.AspNetCore.Authentication.AuthenticationService.ForbidAsync(HttpContext context, String scheme, AuthenticationProperties properties) at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext) at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

Trecho do program.cs

builder.Services.AddSingleton<IAuthorizationHandler, LoginAuthorization>();
builder.Services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
    options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(minha_chave)),
        ValidateAudience = false,
        ValidateIssuer = false,
        ClockSkew = TimeSpan.Zero
    };
});


builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("Login", policy =>
        policy.AddRequirements(new Login())
        );
});
1 resposta
solução!

Olá, Diego! Tudo bem?

Esse tipo de erro geralmente indica que algo está errado na configuração do middleware de autenticação ou autorização. Pelo que você descreveu, parece que o problema está relacionado à falta de um esquema de autenticação padrão para lidar com a situação em que o token não é válido.

Vamos tentar ajustar a configuração para garantir que o esquema de autenticação padrão seja corretamente definido. No seu código, você já está configurando o DefaultAuthenticateScheme, mas parece que falta definir o DefaultChallengeScheme e o DefaultForbidScheme. Vamos adicionar essas configurações:

builder.Services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultForbidScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
    options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(minha_chave)),
        ValidateAudience = false,
        ValidateIssuer = false,
        ClockSkew = TimeSpan.Zero
    };
});

Além disso, certifique-se de que você está utilizando o middleware de autenticação e autorização no pipeline de requisições:

var app = builder.Build();

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

app.MapControllers();

app.Run();

Essas adições devem ajudar a garantir que o esquema de autenticação e autorização sejam corretamente aplicados e que o erro 500 seja resolvido. Caso não resolva peço que compartilhe o seu projeto, via GitHub ou Drive do Google, e link da aula em questão que você teve esse problema.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.