MVC Authorize属性会导致密码提示,但User.Identity.Name会返回正确的结果

时间:2017-03-20 15:56:56

标签: c# asp.net-mvc asp.net-mvc-4

我有一个MVC 4.5网站,它是为Windows Auth设置的:

<authentication mode="Windows" />
<authorization>
  <deny users="?" />
</authorization>

这似乎允许我正确地将User.Identity.Name显示为“DOMAIN \ username”

这意味着,控制器上的这段代码应该可以工作:

[Authorize(Users = @"DOMAIN\username")]
public class TestController : Controller
{...}

但是,添加此选项后,控制器中的所有页面都会导致IE和Chrome一次又一次地提示登录信息。似乎没有办法“登录”该应用程序!

如果我添加[授权],则不会一遍又一遍地提示。

我可以这样做:

if (user.Identity.Name != @"DOMAIN\username")  return NotAuthorized();

在每个方法的开头......但如果Identity设置正确,为什么不能使用它呢?

我有这个问题在Visual Studio下本地运行,以及在iis站点上运行。

Project Properties

PS:在有人将此标记为副本之前,请确保它确实存在 - 我无法找到任何失败的方法。

------更新: 好吧,我想我想出来了......我使用了[授权(角色=“每个人”)]它有效(是的,我们真的有那个角色),所以,我想我会尝试将它设置为无效group,EveryoneX。这导致它提示 - 我想允许您更改为具有访问权限的其他用户。 (我希望它能直接重定向到未经授权的页面。)

所以,我仔细检查过,并且在Users =“OUR_DOMAIN \ username”上有一个拼写错误 - 应该是“OUR-DOMAIN \ username”它现在似乎正常运作。我无法相信我错过了那么久。

感谢所有帮助我找到这个的人。

1 个答案:

答案 0 :(得分:0)

在您的网络文件夹中检查此属性是否与您的可视工作室相同? enter image description here

另一件事是。 Windows身份验证适用于角色,如:

[Authorize(Roles = @"DOMAIN\ADGroup")]
public class TestController : Controller
{...}

OR

var User = System.Web.HttpContext.Current.User;
            if (User.IsInRole("DOMAIN\\ADGroup"))
            {
                return RedirectToAction("UnAuthorized");
            }