首页 > 解决方案 > 将 [Authorize] 与 [Route("xyz")] 一起使用时的无限循环

问题描述

我有一个同时具有 [Authorize] 和 [Route] 属性的控制器操作(在区域内,如果这很重要),如下所示:

[Route("myarea/someaction")]
[Authorize]
public IActionResult SomeAction()
{
    return View("SomeAction");
}

我已将应用程序配置为使用 Azure AD 登录,使用AddOpenIdConnect()等(如果需要,我可以提供更多详细信息)。

当我转到http://localhost:12345/myarea/someaction时,它会正确重定向到 Azure AD,对用户进行身份验证,然后重定向回http://localhost:12345/myarea/someaction - 但是,在无限循环中。它不断地通过身份验证循环。如果我进入调试器,Request.HttpContext.User.Identity.IsAuthenticated返回false.

但是,如果我删除自定义[Route("myarea/someaction")]属性并使用http://localhost:12345/myarea/MyController/SomeAction,它工作正常 - 它在没有循环的情况下进行身份验证和重定向。 Request.HttpContext.User.Identity.Name正确返回经过身份验证的用户的电子邮件地址。

任何想法为什么会发生这种情况?

该应用程序是 ASP.NET Core,使用 .NET Framework 4.6.1、Visual Studio 2017、Windows 10 和 IIS Express。

标签: asp.netasp.net-mvcasp.net-coreasp.net-core-mvcopenid-connect

解决方案


推荐阅读