如何在使用Active Directory角色和身份验证提供程序时提供ASP.NET窗体身份验证UX?

时间:2010-04-09 19:40:30

标签: c# .net asp.net security forms

是否可以将此角色提供程序AspNetWindowsTokenRoleProvider与ASP.NET FORMS身份验证一起使用(通过此MembershipProvider System.Web.Security.ActiveDirectoryMembershipProvider)?

它似乎只适用于<authentication mode="Windows">,是否可以将它与FORMS一起使用?

后台 - 这里的目标是在使用Active Directory作为后端身份验证系统时提供ASP.NET Forms UX。如果有另一种简单的方法可以使用内置技术来做到这一点,那很好,我也想听听。

更新

我应该说我的身份验证正在运行,我正在努力的是添加一个精细控制级别(例如角色)。

目前,我必须设置我的Active Directory连接以指向我的域中的特定OU,这限制了对该OU中物理用户的访问 - 我想要的是将我的Active Directory连接指向我的整个如果我使用Windows身份验证,那么基于群组成员资格(又称角色)限制访问,这是有效的 - 但我想拥有两全其美的优势,这是否可以在不编写我自己的RoleProvider的情况下实现?

3 个答案:

答案 0 :(得分:6)

正如其他人所提到的,您不能将ActiveDirectoryMembershipProviderAspNetWindowsTokenRoleProvider一起使用。如果要将ADMP与表单身份验证一起使用,则可以选择以下几种方法:

  1. 使用AuthorizationManager又名AzMan。 - AzMan内置于Windows 2003+中,可与Active Directory组进行交互。此外,.NET 2.0+中内置了AuthorizationStoreRoleProvider,您可以使用它与其进行交互。 AzMan处理任务,操作和角色,其中可能是您​​的应用程序将被编码为对特定任务执行操作,然后可以将其分组到操作中,然后您可以创建有权执行各种操作的角色。安装AzMan时会安装一个管理应用程序,您可以使用它来管理任务,操作和角色。然而,AzMan有一些缺点。首先,AuthorizationStoreRoleProvider无法识别任务。相反,它会将Roles列表与操作列表一起加载。因此,除非您创建提供程序的自定义版本,否则您的应用程序将需要查找操作名称而不是任务名称。其次,它可以是一个与之合作的熊,在最低层次,仍然是通过COM。除非您希望管理员必须使用AzMan工具,否则您需要编写自己的页面来管理操作,角色和角色成员资格。

  2. 使用SqlRoleProvider并将角色映射到用户名。该解决方案的优点是实现起来非常简单。由于RoleProvider在用户名而非UserId上运行,因此您可以开箱即用。在您的代码中,您只需检查IsInRole以确定给定用户是否已被放入代码识别的角色中。显着的缺点是它仅适用于用户名而不适用于AD组,因此管理员无法使用AD工具来管理用户。相反,您必须编写管理控制台来管理角色成员身份。此外,更改AD级别的用户名需要更新应用程序的已知用户名列表。

  3. 编写(或定位)一个尊重AD组的自定义AD RoleProvider。编写自定义角色提供程序并不适合胆小者,但这样做可以让管理员使用现有的AD工具管理角色成员资格。

答案 1 :(得分:2)

通过继承ADAuthorizeAttribute并覆盖AuthorizeAttribute来实施您自己的AuthorizeCore。它比实现自己的角色提供程序或安装和配置AzMan容易得多。

在此处查看我的示例: ASP .NET MVC Forms authorization with Active Directory groups

答案 2 :(得分:0)

是的,你是对的;它只适用于Windows窗体身份验证。你可以在这里确认一下: http://msdn.microsoft.com/en-us/library/system.web.security.windowstokenroleprovider.aspx

只是一个建议。尝试使用AzMan(授权管理器)的AuthorizationStoreRoleProvider。它适合我(很久以前,所以我不记得太多了。)

相关问题