Edw*_*rey 13 authentication cookies http-redirect asp.net-identity-2 asp.net-core
我有一个ASP.NET Core站点,它对大多数页面使用cookie身份验证.对于这些页面,需要为未授权客户端提供302重定向的默认服务器响应.但是,该站点也接受API请求; 他们使用API密钥,不使用cookie.
理想情况下,我想完全关闭API URL的cookie处理,但最低限度,我需要确保如果API客户端未经授权,服务器不会响应302重定向.
Edw*_*rey 24
仅当路径不是API时,才将重定向事件处理程序替换为使用默认行为的处理程序.在Startup.ConfigureServices
,添加这个:
services.ConfigureApplicationCookie(options => {
options.Events.OnRedirectToAccessDenied = ReplaceRedirector(HttpStatusCode.Forbidden, options.Events.OnRedirectToAccessDenied);
options.Events.OnRedirectToLogin = ReplaceRedirector(HttpStatusCode.Unauthorized, options.Events.OnRedirectToLogin);
});
Run Code Online (Sandbox Code Playgroud)
使用此帮助器方法替换重定向方法:
static Func<RedirectContext<CookieAuthenticationOptions>, Task> ReplaceRedirector(HttpStatusCode statusCode, Func<RedirectContext<CookieAuthenticationOptions>, Task> existingRedirector) =>
context => {
if (context.Request.Path.StartsWithSegments("/api")) {
context.Response.StatusCode = (int)statusCode;
return Task.CompletedTask;
}
return existingRedirector(context);
};
Run Code Online (Sandbox Code Playgroud)
有了这个,API控制器方法可以调用Unauthorized()
而Forbid()
不会导致重定向.
更新:以上是针对ASP.NET Core 2. ASP.NET Core 1的代码是不同的.
对于 .net core 2.x,这里有一个修复(基于爱德华的答案):
services.ConfigureApplicationCookie(options =>
{
options.Events = new CookieAuthenticationEvents
{
OnRedirectToAccessDenied = ReplaceRedirector(HttpStatusCode.Forbidden, context => options.Events.RedirectToAccessDenied(context)),
OnRedirectToLogin = ReplaceRedirector(HttpStatusCode.Unauthorized, context => options.Events.RedirectToLogin(context))
};
});
Run Code Online (Sandbox Code Playgroud)
在哪里ReplaceRedirector
:
Func<RedirectContext<CookieAuthenticationOptions>, Task> ReplaceRedirector(HttpStatusCode statusCode, Func<RedirectContext<CookieAuthenticationOptions>, Task> existingRedirector) =>
context =>
{
if (context.Request.Path.StartsWithSegments("/api"))
{
context.Response.StatusCode = (int)statusCode;
return Task.CompletedTask;
}
return existingRedirector(context);
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3974 次 |
最近记录: |