MVC6防止未经授权的重定向

时间:2015-10-07 11:03:23

标签: angularjs asp.net-core-mvc unauthorized

我正在使用AngularJs前端开发一个ASP.NET MVC 6 Web API应用程序。

当我离开会话十年,或者我试图未经授权调用Web API操作时,我希望收到401状态代码。 相反,我得到302,并尝试重定向到登录的默认路径(" /帐户/登录")。

所以我需要在Angular中处理这个问题。

从这里的其他论坛帖子和Google搜索我发现有些人在startup.cs中解决了他们的问题:

services.Configure<CookieAuthenticationOptions>(options =>
 {
     options.LoginPath = PathString.Empty;
});

对我来说没有运气。

我使用Identity作为身份验证后端,甚至添加

services.ConfigureIdentityApplicationCookie(options =>
{
     options.LoginPath = PathString.Empty;
});

没有给我预期的结果。 ASP.NET文档建议使用这种方式返回401。

使用1.0.0-beta7 CLR x86,IIS Express。

3 个答案:

答案 0 :(得分:6)

编辑:@EZI提出的解决方案是正确的。 在我的回答下面,这对最近发布的版本不起作用。

最后!我找到了解决方案!

为了完成,我开始在aspnet / Identity github上的源代码中找到这条评论。

// If the LoginPath is null or empty, the middleware will not look for 401 Unauthorized status codes, and it will not redirect automatically when a login occurs.

这给了我错误的指示。

使用ConfigureIdentityApplicationCookie&#39;进行调试。选项,我发现有一个代表在&#34; Notifications&#34;属性

OnApplyRedirect

宾果!

现在我可以控制重定向了。

services.ConfigureIdentityApplicationCookie(options =>
{
     options.LoginPath = PathString.Empty;
     options.Notifications = new CookieAuthenticationNotifications {  
         OnApplyRedirect = context => { context.Response.StatusCode = 401; } 
     };
});

这可能不是处理问题的好方法,但最终我在未经身份验证的情况下调用web.api操作时收到401 Unauthorized。

答案 1 :(得分:3)

对我来说,只需将AutometicAuthenticate设置为false即可。

   services.Configure<IdentityOptions>(options =>
        {
            options.Cookies.ApplicationCookie.AutomaticAuthenticate = false;
            options.Cookies.ApplicationCookie.AutomaticChallenge = false;
            options.Cookies.ApplicationCookie.LoginPath = PathString.Empty;
       });

答案 2 :(得分:1)

我的解决方案类似于@Ezi

确认为RC2工作

services.AddIdentity<IdentityUser, IdentityRole>(options =>
    {
        options.Cookies.ApplicationCookie.AutomaticChallenge = false;
    });