asp.net-mvc - ASP.Net MVC 6 + WebAPI Auth - 将 MVC 重定向到登录,但如果使用 WebAPI,则返回 401

标签 asp.net-mvc asp.net-web-api asp.net-identity asp.net-authentication

我有一个 AngularJS + MVC + WebAPI,我正在尝试: - 使用标准(个人账户)进行MVC认证; - 使用相同的用户和密码进行基于 WebAPI 的身份验证。

问题,AngularJS 一切正常,cookie 交换发生,Web API 返回值,但是当我尝试从 Postman 访问 WebAPI 时,我得到的是登录页面的重定向,而不是 401 未经授权。

实现这一目标的最简单方法是什么?我是否必须子类化授权并手动实现逻辑?

谢谢

最佳答案

对于 ASP.Net 5 最新 beta8,答案是将以下内容添加到 Startup.cs 上的ConfigureServices:

         services.Configure<IdentityOptions>(config =>
        {
            options.Cookies.ApplicationCookie.LoginPath = "/Account/Login";
            options.Cookies.ApplicationCookie.CookieHttpOnly = true;
            options.Cookies.ApplicationCookie.CookieSecure = CookieSecureOption.SameAsRequest;
            options.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents()
            {
                OnRedirect = ctx =>
                {
                    if (ctx.Request.Path.StartsWithSegments("/api") &&
                    ctx.Response.StatusCode == 200)
                    {
                        ctx.Response.StatusCode = 401;
                        return Task.FromResult<object>(null);
                    }
                    else
                    {
                        ctx.Response.Redirect(ctx.RedirectUri);
                        return Task.FromResult<object>(null);
                    }
                }
            };
        });

关于asp.net-mvc - ASP.Net MVC 6 + WebAPI Auth - 将 MVC 重定向到登录,但如果使用 WebAPI,则返回 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33263007/

相关文章:

asp.net - Identity 2.0 Code First 表重命名

c# - 用于为不适用于所有枚举的枚举字段创建单选按钮的编辑器模板

c# - 如何获得相同时间的日期时间?

c# - 如何在 MVC 区域内的 WebForms 项目中使用现有的 MasterPage?

api - 如何根据一些表轻松地决定资源

c# - ASP.NET MVC Identity - 一起使用内部用户和 Azure AD 身份验证

c# - 为什么会在运行时陷入困境?

javascript - 通过 WebApi 将媒体批量上传到 Azure Blob 存储

c# - MVC 属性路由不起作用

asp.net-identity - IdentityServer4 多重声明生成(具体场景)