加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

身份验证 – 禁止ASP.NET Core中的API URL重定向

发布时间:2020-12-16 00:15:27 所属栏目:asp.Net 来源:网络整理
导读:我有一个ASP.NET Core站点,它对大多数页面使用cookie身份验证.对于那些页面,需要为未授权客户端提供302重定向的默认服务器响应.但是,该站点也接受API请求;他们使用API??密钥,不使用cookie. 理想情况下,我想完全关闭API URL的cookie处理,但最低限度,我需要确
我有一个ASP.NET Core站点,它对大多数页面使用cookie身份验证.对于那些页面,需要为未授权客户端提供302重定向的默认服务器响应.但是,该站点也接受API请求;他们使用API??密钥,不使用cookie.

理想情况下,我想完全关闭API URL的cookie处理,但最低限度,我需要确保如果API客户端未经授权,服务器不会响应302重定向.

解决方法

仅当路径不是API时,才将重定向事件处理程序替换为使用默认行为的处理程序.在Startup.ConfigureServices中,添加以下内容:
services.ConfigureApplicationCookie(options => {
    options.Events.OnRedirectToAccessDenied = ReplaceRedirector(HttpStatusCode.Forbidden,options.Events.OnRedirectToAccessDenied);
    options.Events.OnRedirectToLogin = ReplaceRedirector(HttpStatusCode.Unauthorized,options.Events.OnRedirectToLogin);
});

使用此帮助程序方法替换重定向方法:

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);
    };

有了这个,API控制器方法可以调用Unauthorized()和Forbid()而不会导致重定向.

更新:以上是针对ASP.NET Core 2. code for ASP.NET Core 1是不同的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读