AZMan使用经验点滴

http://www.microsoft.com/china/msdn/library/security/dotnetsecurity/misauthorizationmanager.mspx?mfr=true

 

1.   AzMan的存储

通过在命令行输入azman.msc即可以打开Azman的控制管理台,利用该管理台我们可以新建和打开AzMan的存储。

常用的存储格式有两种,一种是采用Xml格式存储,另外一种是存储到AD中,后者具有较高的安全性和执行效率。

注意:

当你采用AD存储时,则要求AD域控制器具有windows server 2003域功能级别。如果你采用的是命令行dcpromo来升级到域控制器的话,这时的域控制器并不具有windows server 2003域功能级别,它默认的级别是windows server 2000的域功能级别,你需要到“Active Directory 用户和计算机”控制管理台中来升级,具体的方法如下:

选择根节点,点击“查看”菜单中的“提升域功能级别”的命令,即可以将域控制器升级到windows server 2003级别了。

当你安装了windows 2003sp1之后,就可以调用到azman.msc命令行了。

 

2.   AzMan授权存储的部署

可以采用vbscript脚本来实现AzMan授权存储的部署,采用这种方式,可以将授权存储部署成Xml文件格式或者部署到AD域控制器中。你需要在脚本代码中创建出所有的操作、任务和角色,并将它们进行对应的组合,当然你也可以创建用户组等。其不足之处在于在引用AD的用户或者用户组时,需要的是他们类似Guid标识,示例代码如下:

 

其中我们可以更改存储位置为AD服务器,将上述配置直接保存到AD服务器。

3.   站点Web.Config文件的配置

如果你利用了AzMan来实现用户的授权管理,那你通常也会采用AD来实现用户的身份认证,这时候你只需要修改一下配置文件即可以切换到这些功能上。

3.1. 用户认证

修改默认的membershipprovider为类型是ActiveDirectoryMembershipProvider Provider,如下:

  

 

3.2. 角色(授权)管理

修改roleManagerprovider为类型为AuthorizationStoreRoleProvider Provider即可,如下:

 

 

3.3. 配置认证和授权的链接字符串

 

 

 

 

但是在使用AD存储的AZMan的配置信息数据库时,如果没有配置站点的应用程序池,可能会抛出以下异常:

 

Exception Details: System.Runtime.InteropServices.COMException: 访问权不够,不能执行该操作。 (Exception from HRESULT: 0x80072098)

 

解决这种问题的办法是需要配置站点的应用程序池,可以为该站点专门创建一个应用程序池,并指定在专用的具有较高权限帐户下运行:

选择应用程序池〉属性〉标识〉选择应用程序池的安全标识设置为配置的专用帐户,如系统管理员或者专用创建的AD访问用户。

还有一个可能的原因就是IIS的匿名访问用户,默认的是Iuse_MachineName,可能需要添加该用户对AzMan的访问权限,或者修改成对AzMan具有访问权限的用户。

4.   授权管理器的使用

4.1. 多个授权存储的管理

利用该控制台我们可以打开多个授权管理的存储,包括XML格式和AD存储格式,他们互不影响。

 

4.2. 授权管理器模式

右键单击授权管理器根节点,选择“选项….”,会弹出一个对话框,其中有两种模式,开发人员模式和管理员模式,前者比后者具有更多的功能,例如我们可以定义操作,等,而后者通常是在生产环境下使用,为系统管理员提供了一定的管理权限。

在实际的开发过程中,需要设置为开发人员模式。

如果设置为开发模式,但是却不能进行编辑、新建操作,这时候通常是XML文件被VSS设定为只读的模式,需要去掉只读的属性。

4.3. 应用程序组

感觉称之为“授权存储用户组”更为合适一些,因为它其实是对用户组的管理,我们可以在授权存储的根目录下创建应用程序组,也可以在“应用程序”目录下。我们可以创建两种类型的应用程序组“基本”和“LDAP查询”两种类型,

4.3.1.                        基本类型

可以定义成员和非成员两个部分,例如我们可以利用这个特点定义出除某个人或者某个组之外的所有用户组。

4.3.2.                        LDAP查询

我们可以在其中输入LDAP查询语句,在实际使用该用户组的时候,会执行查询来动态的得到用户。例如,我们可以利用这种方式很方便的定义所有职位为“manager”的成员组,如:(title=Manager)。

 

4.4. 创建操作

操作是最基本的原子单位,我们可以定义一组操作,但这组操作是和我们程序中的具体的动作绑定到一起的,在创建每个操作的时候,需要指定一个操作号码,我们在程序中利用该号码来实现和任务、角色及最终的执行权限关联到一起,即我们可以根据这个操作号码,利用AzMan的编程接口判断出某个用户是否有执行该操作的权限。但在实际的命名和定义号码时,最后能够有一个规范,因为需要在开发过程中使用这些号码。

 

4.5. 创建任务

任务是把一组操作组合到一起,当然也可以包含有其他的子任务,其实相当于一个权限集。

4.6. 创建角色

角色包含有其他较小的角色、各种任务、甚至是操作。

 

4.7. 角色分配

虽然创建了各种角色,但是这些角色并没有和实际的用户关联在一起,为了使他们关联在一起,需要分配角色,一旦分配了角色之后,我们可以在分配的角色上来分配具体的用户组。可以是从AD中选择用户或者组,也可以是我们在上面所提到的应用程序组。

 

5.   代码中使用AzMan

我们可以在程序通过AzMan的类型功能来实现各种更细粒度的控制。

5.1. 引入Com interop程序集

通过项目的“添加引用”,选择“com”选项卡,选择“azroles 1.0 Type Library”来实现对“azroles.dll”组件的引用,然后IDE会自动生成一个代理类“Interop.AZROLESLib.dll”,来实现对Com组件功能的调用。

5.2. 引入名称空间

 

5.3. 使用授权存储类

如: 

上面的代码实现了当前用户是否有权限执行某一操作的判断。

 

5.4. AZMan中的角色

5.4.1.                        判断用户是否在某一角色中

5.4.1.1.           利用HttpContext.Current.User.IsInRole

该方法判断当前登录的用户是否在“roleName”角色中。

5.4.1.2.           利用Roles.IsUserInRole

Roles的名称空间为:System.Web.Security

 

该方法也是判断当前的用户是否在“roleName”角色中。

该方法判断指定的用户名为“userName”的用户是否在“roleName”角色中。

5.4.2.                        Roles中的其他有用的方法

l   Roles.FindUsersInRole

获取某个角色中的用户;

l   Roles.GetAllRoles

获取应用程序的所有的角色;

l   Roles.GetRolesForUser

获取一个用户的所有角色;

l   Roles.GetUsersInRole

获取一个角色中的所有用户;

6.   关于AD的使用

6.1. 如何升级window 2003AD域控制器

可以通过在命令行输入dcpromo命令,然后会弹出AD的安装向导。然后按照安装向导的提示进行操作即可。升级成功以后,注意提升域控制器的级别,通过AD用户和计算机管理界面的查看菜单中,能够找到这一个菜单项。

6.2. 调用AD管理控制台的命令:dsa.msc

6.3. 调用ADSIEDIT的命令:adsiedit.msc

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值