1
resposta

[Bug] O login pelo blazor não reconhecendo o cookie no Azure

Ola, Estou com um erro [bug] O repositório do aula - https://github.com/alura-cursos/ScreenSound.API/tree/Aula5-Video5.3/ScreenSound.API

Quando subo para o Azure o cookies em uso fica ARRAffinitySameSite

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

Na minha maquina, funciona correto a API e WEB localmente, vem .AspNetCore.Identity.Application.

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

Na minha máquina, a API e a WEB funcionam corretamente localmente, ela vem com .AspNetCore.Identity.Application.

Estou usando BLAZOR.

    program.cs in WebAssembly:
    
    var builder = WebAssemblyHostBuilder.CreateDefault(args);
    builder.RootComponents.Add<App>("#app");
    builder.RootComponents.Add<HeadOutlet>("head::after");
     
    builder.Services.AddRadzenComponents();
    
    builder.Services.AddScoped<CookieHandler>();
    builder.Services.AddAuthorizationCore();
    builder.Services.AddScoped<AuthenticationStateProvider, AuthAPI>();
    builder.Services.AddScoped<AuthAPI>(sp => (AuthAPI)sp.GetRequiredService<AuthenticationStateProvider>());
    builder.Services.AddCascadingAuthenticationState();
     
    builder.Services.AddScoped<Status>();
      
    builder.Services.AddHttpClient("API", client => {
        client.BaseAddress = new Uri(builder.Configuration["API:Url"]!);
        //  client.BaseAddress = new Uri("https://localhost:7089/");
        client.DefaultRequestHeaders.Add("Accept", "application/json");
    }).AddHttpMessageHandler<CookieHandler>();
    
    await builder.Build().RunAsync();

Na API tudo parece estar normal. Porque quando eu uso o PostMan ou via Swagger funciona normalmente. O problema é quando eu uso o Blazor.. No API Server :

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();

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

void UseLazyLoadingProxies()
{
    throw new NotImplementedException();
}

builder.Services
    .AddIdentityApiEndpoints<IdentityUser>()
    .AddEntityFrameworkStores<Context>();

builder.Services.AddAuthentication();

builder.Services.AddEndpointsApiExplorer();

builder.Services.AddSwaggerGen();

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

builder.Services.AddCors(
    options => options.AddPolicy(
        "wasm",
        policy => policy
            .AllowAnyMethod()
            .SetIsOriginAllowed(pol => true)
            .AllowAnyHeader()
            .AllowCredentials()));

builder.Services.ConfigureApplicationCookie(options => { 
    options.Cookie.HttpOnly = true; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.Cookie.SameSite = SameSiteMode.None; options.Cookie.Name = ".AspNetCore.Identity.Application"; options.LoginPath = "/login"; options.LogoutPath = "/Identity/Logout"; options.AccessDeniedPath = "/"; });


var app = builder.Build();

app.UseHttpsRedirection();

app.UseCors("wasm");

app.UseStaticFiles();

app.UseCookiePolicy();

app.UseAuthorization();

app.MapCustomIdentityApi<IdentityUser>();

app.MapControllers();

app.UseSwagger();

app.UseSwaggerUI();

app.UseMiddleware<ReadMe.Metrics>();

app.Run();

Estou compartilhando mais código para verificar o problema. Porque ele realmente funciona com o localhost. Pode ser algo no Azure que não está recebendo de outra URL da minha API. É por isso que preciso dessa ajuda.

1 resposta

Olá, Fabio. Tudo bem?

O problema que você está enfrentando pode estar relacionado à configuração de cookies no ambiente do Azure. Aqui estão algumas sugestões para tentar resolver o problema:

  1. Configuração do Cookie no Azure: Verifique se a configuração do cookie no Azure está correta. A configuração ARRAffinitySameSite é usada pelo Azure para garantir que as solicitações sejam direcionadas para a mesma instância. Certifique-se de que o cookie .AspNetCore.Identity.Application está sendo configurado corretamente no ambiente de produção.

  2. SameSite Policy: No código que você compartilhou, o SameSite está configurado como None. Isso é necessário para permitir cookies em ambientes de produção com HTTPS. Certifique-se de que o site está usando HTTPS, pois SameSite=None exige isso.

  3. Verifique a Configuração de CORS: Assegure-se de que a política de CORS está permitindo credenciais, como você já configurou com AllowCredentials(). Isso é importante para que os cookies sejam enviados junto com as solicitações.

  4. Verifique as Configurações de HTTPS: Se o aplicativo está configurado para usar HTTPS no Azure. Isso pode ser feito verificando as configurações do serviço de aplicativo no portal do Azure.

  5. Logs do Azure: Verifique os logs do Azure para ver se há algum erro específico sendo registrado quando você tenta acessar o aplicativo via Blazor.

  6. Teste Localmente com Configurações de Produção: Tente replicar o ambiente de produção localmente o máximo possível para ver se o problema pode ser reproduzido fora do Azure.

Espero que essas dicas ajudem a resolver seu problema!

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