Windows Authentication with Active Directory Groups
我有一个小项目,使用Visual Studio 2013,.NET 4.5,MVC 5和EF 6构建。我使用Windows身份验证创建了该项目,但是现在我需要检查Active Directory组中的成员身份以允许或拒绝访问。
我掉了很多非常深的兔子洞,试图找出方法。最初,我认为我需要将项目更改为使用"本地"身份验证。但是,我发现:
因此,假设#3是正确的,我尝试阅读有关此内容的大量文章,但它们似乎分为两个基本组:
假设要走#1,这是我最近的尝试。
在我的控制器中,我有:
1 2 | [Authorize(Roles=@"SomeDomain\\\\SomeGroup")] public class SomeController : Controller |
在我的Web.config文件中,我具有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <system.web> <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服务器以对我进行身份验证) 。
我错过了什么吗?还是我认为无需编写自定义代码就可以做到这一点是错误的吗?
注意事项:我对.NET,MVC等不是很熟悉,因为它来自Java界,所以请使用一些简单的单词。 :-)
我发现了问题。我上面的内容是正确的,除了域名和角色名称之间有两个反斜杠,而不是两个。该修复程序只是将其更改为此:
1 | [Authorize(Roles=@"SomeDomain\\SomeGroup")] |
您也可以在App_Start文件夹的RegisterGlobalFilters中将其设置为过滤器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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); } } |