Asp.net核心授权重定向不会发生

时间:2016-05-01 13:50:55

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

我正在尝试在Asp.net核心应用程序(dnx 4.5)中使用cookie身份验证。请注意,因为我有自定义身份验证机制(radius),所以我没有使用核心身份验证提供的开箱即用机制。当用户未经过身份验证时,我想重定向到登录页面。

我在Startup.cs中添加了以下代码。当用户未经过身份验证时,我们的想法是重定向到Login Controller:

app.UseCookieAuthentication(options => { options.LoginPath = new Microsoft.AspNet.Http.PathString("/Login"); });

在我的家庭控制器中,我有:

[Authorize]
public IActionResult Index()
{
    return View();
}

在我的Login控制器中,我返回一个与radius登录表单对应的视图:

[AllowAnonymous]
public IActionResult Index()
{
    return View();
}

但是,当我运行应用程序时,重定向永远不会发生。查看控制台输出,我看到以下内容:

warn: Microsoft.AspNet.Mvc.Controllers.ControllerActionInvoker[0]
      Authorization failed for the request at filter 'Microsoft.AspNet.Mvc.Filters.AuthorizeFilter'.
info: Microsoft.AspNet.Mvc.ChallengeResult[1]
      Executing ChallengeResult with authentication schemes ().
info: Microsoft.AspNet.Mvc.Infrastructure.MvcRouteHandler[2]
      Executed action ThingsProjectorWeb.Controllers.HomeController.Index in 0ms
info: Microsoft.AspNet.Hosting.Internal.HostingEngine[2]
      Request finished in 0.0016ms 401

如何正确配置这一点的任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:9)

好的想通了。这一切都在这里解释:https://docs.asp.net/en/latest/security/authentication/cookie.html

我错过了options.AutomaticChallenge = true;,它会自动将您重定向到登录控制器。

以下是更新的选项:

app.UseCookieAuthentication(options => {
                options.LoginPath = new Microsoft.AspNet.Http.PathString("/Login");
                options.AutomaticChallenge = true;
            });

<强>更新

从版本1.1.0开始,它是:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
         LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login"),
         AutomaticChallenge = true
});