Próbuję uzyskać tożsamość rdzenia ASP.NET, aby zwrócić 401, gdy użytkownik nie jest zalogowany. Dodałem atrybut [Authorize]
do mojej metody i zamiast zwracać 401 zwraca 302. Próbowałem tonę sugestii, ale nic nie działa, w tym services.Configure
i app.UseCookieAuthentication
ustawienie LoginPath
do lub PathString.Empty
.Jak zwrócić 401 zamiast 302 w ASP.NET Core?
Odpowiedz
Od ASP.NET podstawowej 2.x:
services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
context.Response.StatusCode = 401;
return Task.CompletedTask;
};
});
Dobra, po kopaniu w asp.net core unit tests W końcu znalazłem działające rozwiązanie. Trzeba dodać następujące wezwanie do services.AddIdentity
services.AddIdentity<ApplicationUser, IdentityRole>(o => {
o.Cookies.ApplicationCookie.AutomaticChallenge = false;
});
Czy to nadal przekierowuje użytkownika na stronę logowania? Dostaję ALOT z ruchu na strony, które po kliknięciu przekierują do strony logowania z powodu 302. Nadal chcę, żeby to działało, ale chcę, żeby wszystkie boty zawiodły to połączenie, więc nigdy go nie nazywają znowu (401/403). 302 nadal będzie im powtarzał, aby nadal do niego dzwonili. (To jest dla tych, którzy nie honorują pliku robots.txt, gdzie konkretnie "nie zezwalam na ten wzorzec adresu URL") – ganders
@ganders No. Jeśli chcesz, aby twoja aplikacja zachowywała się w określony sposób na 401, będziesz sam sobie z tym poradzić. Zazwyczaj numer 401 powinien zawierać nagłówek WWW-Authenticate, który opisuje sposób uwierzytelniania. –
Nagłówek 'WWW-Authenticate' MUSI być podany na 401. ' Jeśli żądanie chronionego zasobu nie zawiera poświadczeń uwierzytelniających lub nie zawiera znacznika dostępu, który umożliwia dostęp do chronionego zasobu, serwer zasobów MUSI zawierać HTTP "WWW -Authenticate "pole nagłówka odpowiedzi" – urbanhusky
services.Configure<IdentityOptions>(options =>
{
options.Cookies.ApplicationCookie.LoginPath = new PathString("/");
options.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents()
{
OnRedirectToLogin = context =>
{
if (context.Request.Path.Value.StartsWith("/api"))
{
context.Response.Clear();
context.Response.StatusCode = 401;
return Task.FromResult(0);
}
context.Response.Redirect(context.RedirectUri);
return Task.FromResult(0);
}
};
});
Źródło:
To jest dokładnie to, czego potrzebowałem. Dzięki! –
Niestety, to nie działa na rdzeń tożsamości 2 –
Dla Asp.net Core 2 stosowany zamiast
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = new PathString("/Account/Login");
options.LogoutPath = new PathString("/Account/Logout");
options.Events.OnRedirectToLogin = context =>
{
if (context.Request.Path.StartsWithSegments("/api")
&& context.Response.StatusCode == StatusCodes.Status200OK)
{
context.Response.Clear();
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
return Task.FromResult<object>(null);
}
context.Response.Redirect(context.RedirectUri);
return Task.FromResult<object>(null);
};
});
To rozwiązanie działa doskonale w Core 2! Dziękuję Ci –
Jeśli nagłówek wniosek zawiera X-Zamówiony-with: XMLHttpRequest kod statusu będzie 401 zamiast 302
private static bool IsAjaxRequest(HttpRequest request)
{
return string.Equals(request.Query["X-Requested-With"], "XMLHttpRequest", StringComparison.Ordinal) ||
string.Equals(request.Headers["X-Requested-With"], "XMLHttpRequest", StringComparison.Ordinal);
}
- 1. ASP.net 5.0 - WebAPI Authorize & ErrorCode 302 zamiast 401
- 2. Powrót "application/xml" zamiast "text/plain" ASP.NET Core Web API
- 3. Ustaw CultureInfo w Asp.net Core, aby mieć. jako CurrencyDecimalSeparator zamiast,
- 4. @ Html.Action w Asp.Net Core
- 5. Odpowiedź symfony zwrot 401 zamiast przekierowania
- 6. Spring Security anonim 401 zamiast 403
- 7. Angular2 ASP.NET Core AntiForgeryToken
- 8. TempData null w asp.net core
- 9. Przeglądarka raportów SSRS + Poświadczenia ASP.NET 401 Wyjątek
- 10. Zarządzanie błędami Asp.net Core
- 11. Trasy w ASP.net Core API
- 12. Bezpieczeństwo IP w Asp.Net Core
- 13. ASP.NET Core Response.End()?
- 14. Jak sprawdzić odpowiedź 302? WebRequest
- 15. Jak mogę zwrócić pdf z żądania internetowego w ASP.NET?
- 16. ASP.NET Core Identity 3 Cookie timeout
- 17. Przyjazny dla użytkownika ASP.NET MVC błąd 401
- 18. Jak zwrócić błąd z działania ASP.NET MVC
- 19. jak obsługiwać przekierowanie 302 w scrapy
- 20. Token sieciowy ASP.NET JSON "401 Nieautoryzowane"
- 21. Jak zwrócić pusty łańcuch zamiast wartości zerowej w widokach JBoader?
- 22. Jak używać npm z ASP.NET Core
- 23. Jak programowo zrestartować aplikację core asp.net?
- 24. Wykrywanie programu ASP.NET Core 1.0
- 25. Jak mogę uzyskać URL Referrer w ASP.NET Core MVC?
- 26. Baza jądrowa ASP.NET Core RC2
- 27. MediatR z ASP.NET Core DI
- 28. Uwierzytelnianie plików cookie Asp.Net Core
- 29. Projekt ASP.NET Core 1.0 F #
- 30. Asp.net Core nie zbiera śmieci
również, twoje wezwanie do usług. AddIdentity musi przyjść przed tym –