-
Notifications
You must be signed in to change notification settings - Fork 10.5k
Closed
Labels
area-authIncludes: Authn, Authz, OAuth, OIDC, BearerIncludes: Authn, Authz, OAuth, OIDC, Bearer
Description
Cookieauthentication,I add OnRedirectToAccessDenied Event and modify status to 403 ,and Although executed this event,but it still response 200 and AccessDeny page。How to make 403 statuscode work?
OnRedirectToLogin Event response 401 is ok,so I confused
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,options=> {
#region
////options.LoginPath //似乎无效
//options.AccessDeniedPath = "/Account/AccessDenied";
options.Events.OnRedirectToLogin = context =>
{
if (context.Request.Path.StartsWithSegments("/api", StringComparison.OrdinalIgnoreCase))
{
if (context.Response.StatusCode == StatusCodes.Status200OK)
{
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
}
}
return Task.CompletedTask;
};
options.Events.OnRedirectToAccessDenied = context =>
{
if (context.Request.Path.StartsWithSegments("/api", StringComparison.OrdinalIgnoreCase))
{
if (context.Response.StatusCode == StatusCodes.Status200OK)
{
context.Response.Headers["Location"] = context.RedirectUri;
context.Response.StatusCode = StatusCodes.Status403Forbidden;
}
}
return Task.CompletedTask;
};
#endregion
})
If I try rewrite response,it will throw InvalidOperationException
as follow:
options.Events.OnRedirectToAccessDenied = context =>
{
if (context.Request.Path.StartsWithSegments("/api", StringComparison.OrdinalIgnoreCase))
{
if (context.Response.StatusCode == StatusCodes.Status200OK)
{
context.Response.Headers["Location"] = context.RedirectUri;
context.Response.StatusCode = StatusCodes.Status403Forbidden;
context.Response.WriteAsync("error code" + StatusCodes.Status403Forbidden, new System.Threading.CancellationToken());
}
}
return Task.CompletedTask;
};
Exception:
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
An unhandled exception has occurred while executing the request.
System.InvalidOperationException: StatusCode cannot be set because the response has already started.
How Can I get a Correct 403,and way this is invalid??can help me,vary thanks!!
The environment is ASP.Net Core 2.2
Metadata
Metadata
Assignees
Labels
area-authIncludes: Authn, Authz, OAuth, OIDC, BearerIncludes: Authn, Authz, OAuth, OIDC, Bearer