Angular + ASP.NET Core 6 + ověření pomocí Windows rubrika: Programování: .Net
Ahoj.
Chtěl bych vás požádat o radu, jak předat ověření z Angular aplikace do běžícího IIS Express během vývoje aplikace.
Mám RESTAPI URL, která mi informuje o tom, zdali má uživatel nějaké oprávnění. K tomu, abych to zjistil, potřebuji informaci o přihlášeném uživateli.
V Angular aplikaci mám nastaveno "this.http.get<Rights>('https://localhost:44316/api/user/rights', { withCredentials: true })
", Toto volání mi zajistí, že se na server odešlou cookie informace o přihlášeném uživateli stejně, jako když na URL adresu https://localhost:44316/api/user/rights přistoupím přímo z prohlížeče (porovnal jsem si informace odesílané v hlavičce requestu obou volání). Pokud URL vyvolám pomocí Angularu, tak dostanu chybu 401 Unauthorized.
Pokud udělám deploy na IIS server, aplikace funguje správně. Proto předpokládám, že problém je (samozřejmě mezi klávesnicí a židlí) při předávání informací z nodejs na IIS Express, protože v produkci nodejs neběží a na vygenerované statické soubory Angularu se přistupuje přímo na server, kde běží i backendová část.
Myslel jsem si, že problém může být v CORS, proto jsem vyzkoušel následující nastavení, které mi ale nepomohlo. Zde je výpis souboru Program.cs:
using MyApp.Providers.AuthHandlers; using MyApp.Providers.AuthHandlers.Constants; using MyApp.Providers.AuthHandlers.Scheme; var MyAllowSpecificOrigins = "_myAllowSpecificOrigins"; var builder = WebApplication.CreateBuilder(args); builder.Services.AddCors(options => { options.AddPolicy(name: MyAllowSpecificOrigins, policy => { policy.WithOrigins("https://localhost:44416", "https://localhost:44316") // první je nodejs, druhý je IIS Express .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); // Add services to the container. builder.Services.AddAuthentication( options => options.DefaultScheme = WinAuthSchemeConstants.WinAuthScheme) .AddScheme<WinAuthSchemeOptions, WinAuthHandler>(WinAuthSchemeConstants.WinAuthScheme, options => { }); builder.Services.AddControllersWithViews(); builder.Services.AddHttpContextAccessor(); builder.Host.ConfigureLogging(logging => { logging.ClearProviders(); logging.AddFile(builder.Configuration.GetSection("Logging")); }); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { // The default HSTS value is 30 days. You may want to change this for production scenarios, see aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseCors(MyAllowSpecificOrigins); //app.UseAuthentication(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller}/{action=Index}/{id?}"); app.MapFallbackToFile("index.html"); app.Run();
Může být problém i v chybně nastaveném souboru aplikace\ClientApp\proxy.conf.js?
Netušíte někdo, co dělám špatně?
OS: Windows 10
Prostředí: Visual Studio 2022 Community Edition
Verze ASP.NET Core: 6.0
Nastavení IIS Express: mám povoleno Use SSL, Enable Windows Authentication
ASP.NET Core 5 mi to funguje s IIS Express, ale tam to řeším pomocí filtrů v MVC, což se mi tady nehodí a ani se mi to pomocí filtrů nepodařilo zprovoznit na ASP.NET Core 6.
Pro plný přístup na Devel.cz se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře