Ich versuche ASP.NET Core Identity 401 zu erhalten, wenn ein Benutzer nicht angemeldet ist. Ich habe ein [Authorize]
Attribut zu meiner Methode hinzugefügt und anstatt 401 zurückgegeben, gibt 302 zurück. Ich habe eine Tonne probiert von Vorschlägen scheint aber nichts zu funktionieren, einschließlich services.Configure
und app.UseCookieAuthentication
Einstellung LoginPath
bis null
oder PathString.Empty
.Wie 401 anstelle von 302 in ASP.NET Core zurückgegeben werden?
Antwort
Ab ASP.NET Core-2.x:
services.ConfigureApplicationCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
context.Response.StatusCode = 401;
return Task.CompletedTask;
};
});
Okay nach dem Graben in der asp.net core unit tests fand ich endlich eine funktionierende Lösung. Sie haben die folgende auf Ihren Anruf zu services.AddIdentity
services.AddIdentity<ApplicationUser, IdentityRole>(o => {
o.Cookies.ApplicationCookie.AutomaticChallenge = false;
});
Leitet dies den Benutzer noch immer auf die Anmeldeseite um? Ich erhalte sehr viel Traffic auf Seiten, die beim Klicken aufgrund der 302 auf die Anmeldeseite umgeleitet werden. Ich möchte immer noch, dass das funktioniert, aber ich möchte, dass alle Bots diesen Aufruf nicht ausführen, so dass sie ihn nie aufrufen wieder (a 401/403). Ein 302 wird ihnen immer noch sagen, dass sie es weiterhin anrufen sollen. (Dies ist für diejenigen, die die robots.txt-Datei nicht berücksichtigen, wo ich das URL-Muster ausdrücklich "verbiete") – ganders
@ganders Nein. Wenn Sie möchten, dass sich Ihre App auf eine bestimmte Weise auf 401 verhält, werden Sie muss selbst damit umgehen. Normalerweise sollte ein 401 einen WWW-Authenticate-Header enthalten, der beschreibt, wie man sich authentifiziert. –
'WWW-Authenticate'-Header muss auf 401 bereitgestellt werden. ' Wenn die geschützte Ressourcenanforderung keine Authentifizierungsdaten enthält oder kein Zugriffstoken enthält, das den Zugriff auf die geschützte Ressource ermöglicht, MUSS der Ressourcenserver das HTTP "WWW -Authenticate "Response-Header-Feld" – 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);
}
};
});
Quelle hinzuzufügen:
Dies ist genau das, was ich brauchte. Vielen Dank! –
leider funktioniert dies nicht auf Identität Kern 2 –
Für Asp.net Core 2 NUTZUNG DIESES STATT
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);
};
});
Diese Lösung ist in Core 2 perfekt funktioniert! Vielen Dank –
Wenn der Request-Header X-Requested-With enthält: statt 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);
}
Siehe auf GitHub XMLHttpRequest der Code-Status wird 401 sein: https://github.com/aspnet/Security/blob/5de25bb11cfb2bf60d05ea2be36e80d86b38d18b/src/Microsoft.AspNetCore.Authentication.Cookies/Events/CookieAuthenticationEvents.cs#L40-L52
- 1. login_required Decorator auf Ajax-Ansichten 401 anstelle von 302 zurückgeben
- 2. HttpStatusCodeResult (401) gibt "302 Found" zurück
- 3. ASP.net 5.0 - WebAPI Authorize & ErrorCode 302 statt 401
- 4. Erhalte leere Seite anstelle von 401 Fehlerseite
- 5. Asp.Net Core richtlinienbasierte Autorisierung endet mit 401 Nicht autorisiert
- 6. HTACCESS Issues Resulting in 401 und Multiple 302
- 7. Catch 302 mit Apache und Rückgabe 401 statt
- 8. Wie Unauthorized in einem Asp.Net Core Custom Authorization Filter zurückgegeben wird
- 9. Wie Fehler von ASP.NET MVC-Aktion zurückgegeben werden
- 10. HttpResponse.Filter Entsprechung in ASP.NET Core
- 11. Wie kann Versionierung in ASP.NET Core Web API durchgeführt werden
- 12. ASP.NET MVC benutzerfreundlich 401 Fehler
- 13. Request.Files in ASP.NET CORE
- 14. Abfangen von 401 von Formularauthentifizierung in ASP.NET MVC?
- 15. Wie zweidimensionale Arrays in C++ zurückgegeben werden
- 16. Komprimieren von Bildern in C# asp.net Core
- 17. IServiceProvider in ASP.NET Core-
- 18. Deserialisieren von XML in Asp.NET Core MVC
- 19. Äquivalent von "@section" in ASP.NET Core MVC?
- 20. Warum sollte eine Sammlungsschnittstelle anstelle eines konkreten Typs zurückgegeben werden?
- 21. Falsche Ansicht zurückgegeben werden
- 22. UserHostAddress in Asp.net Core
- 23. @ Html.EnumDropDownListFor in Asp.net Core
- 24. Dropdownmenü in ASP.NET Core 1.0
- 25. Benutzerdefinierte Authentifizierung in ASP.Net-Core
- 26. Wie Server Gesendete Ereignisse mit Asp.NET Web API zurückgegeben werden
- 27. Wie UseStaticFiles in ASP.NET Core-1
- 28. Dynamisches Routing in ASP.Net Core
- 29. Verwendung von SignalR in ASP.NET Core 1.0
- 30. Wie in returnUrl AccessDeniedPath in ASP.NET MVC 6 (ASP.NET Core)
auch, Ihr Anruf bei services.AddIdentity muss vor diesem –