我有一个小项目,使用Visual Studio 2013,.NET 4.5,MVC 5和EF 6构建。我使用Windows身份验证创建它,但现在我需要检查Active Directory组中的成员身份以允许或拒绝访问。
我已经走了许多非常深的兔子洞,试图找出如何做到这一点。起初我假设我需要更改项目以使用“内部部署”身份验证。但是,我发现:
所以,假设#3是真的,我尝试阅读很多关于此的帖子,但它们似乎分为两个基本组:
假设#1是要走的路,这是我最近的尝试。
在我的控制器中,我有:
[Authorize(Roles=@"SomeDomain\\SomeGroup")]
public class SomeController : Controller
在我的Web.config文件中,我有:
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
<providers>
<clear/>
<add name="AspNetWindowsTokenRoleProvider"
type="System.Web.Security.WindowsTokenRoleProvider"
applicationName="/" />
</providers>
</roleManager>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="BehaviorConfiguration">
<serviceAuthorization
principalPermissionMode="UseAspNetRoles"
roleProviderName="AspNetWindowsTokenRoleProvider" />
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
当我尝试访问该页面时,系统会提示我登录。输入我的登录ID和密码后,我继续收到登录提示。我不被允许进入该页面。
我没有任何地方告诉我的应用程序Active Directory服务器在哪里,但我得到的印象是Windows已经知道(因为,当我登录到Windows时,它访问Active Directory服务器以验证我)
我错过了什么吗?或者我错误地认为可以在不编写自定义代码的情况下完成此操作?
警告:我对来自Java世界的.NET,MVC等相当陌生,所以请使用小词。 : - )答案 0 :(得分:8)
我发现了问题。我上面的内容是正确的,除了我在域名和角色名称之间有两个反斜杠,而不是一个。修复只是改变它:
[Authorize(Roles=@"SomeDomain\SomeGroup")]
答案 1 :(得分:0)
您还可以在App_Start文件夹中的RegisterGlobalFilters中创建一个过滤器。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
if (filters == null)
{
throw new ArgumentNullException("filters");
}
filters.Add(new HandleErrorAttribute());
var authorizeAttribute = new AuthorizeAttribute
{
Roles = "Domain\Group" // Role = group in Active Directory
};
filters.Add(authorizeAttribute);
}
}