2013-12-20 53 views
13

我正在构建一个公司环境内部使用的MVC4应用程序。我使用Windows身份验证,这工作正常,但我有麻烦使用Active Directory组作为授权角色。使用活动目录角色提供者的授权MVC4

我的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应该实现这没有一个自定义角色提供者(或至少这就是我想的)

任何人都可以帮助我吗?

提前致谢!

回答

16

我发现哪个是问题。阅读了关于machine.config的一些信息here我检查了我已经应用了正确的配置。

Fianlly我得到它的工作就像这样:

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

问题是我输入组的方式。

我希望这可以帮助其他人。

+0

啊,双反斜杠!我一直在为此工作数小时 - 欢呼 – 2014-02-28 10:43:24

+1

@ D.Mac - 它的标准C#字符串格式化/转义:“域\\组”或@“域\组”。 https://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx –

+3

是的,反弹不能是原因或语义差异,因为它只是一个语法问题 – Mzn