是否可以将此角色提供程序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的情况下实现?
答案 0 :(得分:6)
正如其他人所提到的,您不能将ActiveDirectoryMembershipProvider
与AspNetWindowsTokenRoleProvider
一起使用。如果要将ADMP与表单身份验证一起使用,则可以选择以下几种方法:
使用AuthorizationManager
又名AzMan。 - AzMan内置于Windows 2003+中,可与Active Directory组进行交互。此外,.NET 2.0+中内置了AuthorizationStoreRoleProvider
,您可以使用它与其进行交互。 AzMan处理任务,操作和角色,其中可能是您的应用程序将被编码为对特定任务执行操作,然后可以将其分组到操作中,然后您可以创建有权执行各种操作的角色。安装AzMan时会安装一个管理应用程序,您可以使用它来管理任务,操作和角色。然而,AzMan有一些缺点。首先,AuthorizationStoreRoleProvider
无法识别任务。相反,它会将Roles
列表与操作列表一起加载。因此,除非您创建提供程序的自定义版本,否则您的应用程序将需要查找操作名称而不是任务名称。其次,它可以是一个与之合作的熊,在最低层次,仍然是通过COM。除非您希望管理员必须使用AzMan工具,否则您需要编写自己的页面来管理操作,角色和角色成员资格。
使用SqlRoleProvider并将角色映射到用户名。该解决方案的优点是实现起来非常简单。由于RoleProvider在用户名而非UserId上运行,因此您可以开箱即用。在您的代码中,您只需检查IsInRole以确定给定用户是否已被放入代码识别的角色中。显着的缺点是它仅适用于用户名而不适用于AD组,因此管理员无法使用AD工具来管理用户。相反,您必须编写管理控制台来管理角色成员身份。此外,更改AD级别的用户名需要更新应用程序的已知用户名列表。
编写(或定位)一个尊重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。它适合我(很久以前,所以我不记得太多了。)