Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Bug] Mesmo logando, ele volta 401

Mesmo registrando um usuário e logando com ele, ao testar o get artista ele volta 401.

Login:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeMétodo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

program.cs

using Microsoft.EntityFrameworkCore;
using ScreenSound.API.Endpoints;
using ScreenSound.Data;
using ScreenSound.Modelos;
using ScreenSound.Shared.Dados.Modelos;
using ScreenSound.Shared.Models.Models;
using System.Text.Json.Serialization;

var builder = WebApplication.CreateBuilder(args);

uilder.Services.AddCors(
    options => options.AddPolicy(

        "wasm",

        policy => policy.WithOrigins(

            [builder.Configuration["BackendUrl"] ?? "https://localhost:7122/",
            builder.Configuration["FrontendUrl"] ?? "https://localhost:7199/"]

        ).AllowAnyMethod()
         .SetIsOriginAllowed(pol => true)
         .AllowAnyHeader()
         .AllowCredentials()
    )
);


builder.Services.AddDbContext<ScreenSoundContext>((options) =>
{
    options.UseSqlServer(builder.Configuration["ConnectionStrings:ScreenSoundDB"]).UseLazyLoadingProxies(false);
});

builder.Services.AddIdentityApiEndpoints<PessoaComAcesso>().AddEntityFrameworkStores<ScreenSoundContext>();

builder.Services.AddAuthorization();

builder.Services.AddTransient<DAL<Artista>>();
builder.Services.AddTransient<DAL<Musica>>();
builder.Services.AddTransient<DAL<Genero>>();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>
(
        options => options.SerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles
);

var app = builder.Build();

app.UseAuthentication();

app.UseCors("wasm");

app.AddEndPointArtistas();
app.AddEndPointMusicas();
app.AddEndPointGenero();

app.MapGroup("auth").MapIdentityApi<PessoaComAcesso>().WithTags("Autorizar");

app.UseSwagger();
app.UseSwaggerUI();

app.UseCors(x => x.AllowAnyMethod()
                .AllowAnyHeader()
                .SetIsOriginAllowed(origin => true)
                .AllowCredentials()
);

app.UseStaticFiles();

app.Run();

Ainda não consegui encontrar o bug.

solução!

Olá Igor, bom dia camarada!

Parece que você está enfrentando um problema de autenticação ao tentar acessar o endpoint de artistas, recebendo um erro 401. Aqui estão algumas sugestões para resolver isso:

  1. Verifique o Token de Autenticação:

    • Certifique-se de que o token de autenticação ou cookie está sendo enviado corretamente na requisição para o endpoint /Artistas. O erro 401 geralmente indica que o servidor não recebeu credenciais válidas.
  2. Cookies e Headers:

    • Se você está usando cookies para autenticação, confirme que eles estão habilitados e sendo enviados com a requisição. Caso contrário, se estiver usando tokens JWT, verifique se o token está presente no header Authorization como Bearer <token>.
  3. Configuração do Endpoint:

    • No código mostrado, o endpoint de artistas está configurado com RequireAuthorization(). Isso significa que ele requer autenticação. Certifique-se de que a autenticação está configurada corretamente no Program.cs e que o serviço de identidade está sendo usado conforme necessário.
  • Adicione o Middleware: app.UseAuthorization(); -
  1. Verifique o Login:

    • Confirme que o processo de login está retornando um status 200 e que as credenciais estão corretas. Você pode tentar logar novamente e verificar se o token ou cookie é atualizado.
  2. Debugging:

    • Use ferramentas de debugging para verificar se o token ou cookie está sendo gerado e enviado corretamente. Ferramentas como Postman podem ajudar a inspecionar as requisições HTTP.

Espero que ajude e bons estudos!

Boa tarde professor.

O que estava faltando era o app.UseAuthorization(); no meu program.cs da API.

Confundi o app.UseAuthentication(); com o app.UseAuthorization(); e achei que também já tinha colocado ele no meu arquivo.