使用活动目录角色提供程序进行授权 MVC4

16

我正在为企业内部使用构建一个MVC4应用程序。我使用Windows认证,这很好运行,但是在使用Active Directory组作为授权角色方面遇到了麻烦。

我的Web.config文件如下:

<authentication mode="Windows" />        
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
  <providers>
    <clear />
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
  </providers>
</roleManager>        
<authorization>
  <deny users="?" />    
</authorization>

当我使用用户授权时,它运行良好:

[Authorize(Users = @"DOMAIN\User1, DOMAIN\User2")]
public ActionResult Create()
{
    return View();
}

但是当我使用角色时,它不允许属于该组的用户访问此操作:

[Authorize(Roles = @"Domain\Group")]
public ActionResult Create()
{
    return View();
}

我也尝试了在其他回复中提到的不带域名指定组,但没有成功...我想我在Web.config中漏掉了什么,但我不确定是什么...

我一直避免使用自定义角色提供程序,因为MVC4应该可以在没有自定义角色提供程序的情况下实现这一点(至少我是这么认为的)

有人能帮我吗?

先感谢您!

1个回答

20

我找到了问题所在。在阅读有关machine.config的一些信息(这里)之后,我检查了已经应用了正确的配置。

最终我像这样使它工作起来:

[Authorize(Roles = "Domain\\Group")]
public ActionResult Create()
{
    return View();
}

问题在于我输入的群组方式。

希望这能帮到其他人。


啊,双反斜杠!!我已经为此工作了几个小时 - 干杯 - user964769
2
@D.Mac - 这是标准的C#字符串格式化/转义方式:"Domain\Group" 或者 @"Domain\Group"。https://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx - Tedd Hansen
3
是的,抵制不能成为原因或语义差异,因为这只是一种句法问题。 - Lzh
我现在管理方式有些不同,使用自定义角色提供程序覆盖WindowsTokenRoleProvider类,但使用方式完全相同。我会查找您的IIS配置中的错误,确保启用了Windows身份验证和正确的提供程序(通常为NTLM,但在您的环境中可能不同)。其他需要回答的问题是:用户是否正确进行身份验证? - Roberto
不行,这对我也不起作用。完全相同的问题。只有用户似乎可以工作。唉,这是一个非常愚蠢的问题,似乎没有人知道答案。 - Nathan McKaskle
显示剩余3条评论

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