Asp.net Core授权重定向未发生

11

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

我已经在Startup.cs中添加了以下代码。其想法是在用户未经身份验证时重定向到登录控制器:

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

在我的Home控制器中,我有:

[Authorize]
public IActionResult Index()
{
    return View();
}
在我的登录控制器中,我返回一个对应于半径登录表单的视图:
[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个回答

10

好的,问题解决了。这里已经全部解释清楚: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
});

这在IIS集成上对我不起作用。在Kestrel上,我得到了一个完美的302,但在IIS上,我得到了401。你有没有做什么来使它也在IIS集成上工作? - Mitch Dart
@MitchDart 可能是IIS默认使用FormsAuthentication。尝试在web.config中添加 <modules> <remove name="FormsAuthenticationModule" /> <remove name="FormsAuthentication" /> </modules>? - Strake
这对我也不起作用。我已经卡在试图重定向两天了。你需要在此之前添加一个服务吗?我有:services.AddSession(); 应该支持此操作。已经厌倦了Core,它就是无法工作。 - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接