NOVOTS KMS 词汇表 Glossary    联系我们 Contact Us
查询 Search  
   
按类别浏览 Browse by Category
NOVOTS KMS .: 工作心得 .: 在ASP.NET应用中集成Windows域帐户来进行权限控制

在ASP.NET应用中集成Windows域帐户来进行权限控制

 
  
企业应用程序采用域用户来代替独立的用户管理模块的好处很多。
  
  
程序本身不需要单独编写用户帐号管理模块与域用户集成,用户不需要单独记忆用户名口令,可以实现无登录采用与用户方案安全性提升到域用户安全级别其他好处多多。
  
  
  
首先需要配置IIS
  
  
为你的应用单独建立一个web虚拟目录,右键选择属性里的目录安全,权限与访问控制,把打开匿名访问不选,仅仅选择集成Windows权限认证,别的都不要选,确定。   
  
  
  
  
集成域用户来控制用户访问的途经有两种,一种是利用NTFS权限控制表,缺点是每次转移应用之后,需要逐个设置目录访问权限。另外一种是通过配置web.config文件,通过URL来控制,好处是直接修改配置文件就可以了,不需要每次发布应用时变换一次目录就修改一次。下面主要介绍后者。
     
  
  
划应用目录树:
  
  
根目录的权限设置覆盖子目录的设置,把管理页面单独放在一个路径下,举例如下:
  
  
  \root\
     
  \root\admin
     
  \root\user
    
  
  
  
修改配置文件:
  
  
  
在需要进行权限配置的目录下面,分别建立web.config文件。root下面肯定需要一个配置文件了,在本例中由于admin路径下放置了管理页面,因此我在admin下面也建立了一个web.config配置文件。
    
  
  root
下的web.config配置文件的和权限相关的内容如下:
  
  
  <?xml version="1.0"?>
  <configuration>
   <connectionStrings>
   <add name="APPConnectionString" connectionString="Data Source=MachineName;Initial Catalog=DatabaseName;Integrated Security=SSPI"
   </connectionStrings>
   <system.web>
   <authentication mode="Windows" />
   <!--<identity impersonate="true" userName="UserName" password="PassWord" />-->
   <identity impersonate="true"/>
   <authorization>
   <allow roles="UserName,domainname\username1,domainname\username2,domainname\usergroup1" />
   <deny users="*"/>
   </authorization>
   </system.web>
  </configuration>
  
  
  
  admin
目录下也增加一个web.config文件
     
  <?xml version="1.0"?>
  <configuration>
   <system.web>
   <authorization>
   <allow roles="domainname\username1" />
   <deny users="*"/>
   </authorization>
   </system.web>
  </configuration>
  
  
  
首先,先解释一下admin下面的这个配置文件,允许domainname\username1访问这个管理目录,而禁止任何其他的用户来访问这些功能页面。
  
  
  
下面,再接是一下root下面的这个配置文件,增加了一个链接数据库的字符串,采用的是MS推荐的安全连接,没有使用sa之类的SQL管理的账户。 
      
   
  authentication mode="Windows"
的意思是集成域用户,这句话是打开应用支持域用户的关键。
  
  allow
列表里面我规定了可以访问root的用户,每个用户之间用逗号分隔,这里可以指定服务器本机用户,也可以指定域用户,或者域用户组
     
  deny
列表里我规定了禁止所有用户访问(允许列表里的用户除外)
  
  
以上这两个类表可以使用的通配符有 ? 匿名用户, * 所有用户 
       
   
  
到目前为止,其实就已经算是完成了,由于前面链接数据库所使用的是安全连接,没有使用sa,如果使用了sa,实际上可以到此为止了。但是如果使用sa或者其他SQL管理的用户帐号,那实际上就把口令写到了配置文件里面,这样不好。
       
  
  
因为使用了安全连接,每次用户登录应用的时候,系统自动匹配当前用户登录所使用的域用户名,去链接SQL数据库,这样,实际上需要给每一个域用户分配访问SQL的权限,这样既麻烦,而且也不是我们想要的。按一般的开发模式,都是采用一个代理帐号去统一链接数据库的。那怎么打开这个代理呢?
  
     
  <identity impersonate="true" userName="UserName" password="PassWord" />
    
  
  
增加这么一句就打开了代理,实际上每次客户连接应用,都是通过这个指定的代理用户去访问数据库的。到此为止也可以了。但是,这样,即使是在连接数据库字符串里采用了安全连接,可是最后还是把用户口令写道了配置文件里面!   
      
   <identity impersonate="true" />
     
  
  
把用户名口令从这句里面去掉,但是在哪里去指定这个代理用户呢?
     
  
  
再次修改IIS指定代理用户
  
  
建立一个新的应用程序池,右键选择属性,identity用户表示里面,把匿名用户去掉,在下面选择代理用户。
     
  
这样每次,应用就会使用所指定的代理用户去链接数据库。
     
  
  
这样,既使用了安全连接,有没有把任何用户的口令写在配置文件里面。
     
  
  
例如,如果需要在应用中显示当前用户身份,而且需要根据用户身份去判断,谁有权限去修改相关记录怎么办?
    
  
  
在代码中调用域用户权限
  
增加 Using Page.User.Identity 这个引用,在代码重用如下代码来访问域用户身份。   
     
  Page.User.Identity.Name
     
  Page.User.Identity.IsAuthenticated 
   
  
   
  IIS
对于应用池的代理用户实际上是有特殊规定的,随便的制定一个用户不行。需要把代理用户身份改回Network Service,然后把指定用户加入到Network Service组里,就像安装其他的MS服务程序(SharePoint之类的)一样的配置,这样就可以了。


这篇文章对你多有用?

相关文章

article 如何进行时间管理
        ...

(No rating)  9-5-2012    Views: 997   
article 如何对网线进行全方位测试
在组建局域网的过程中,人们往往会不惜重金去购买...

(No rating)  4-26-2011    Views: 1045   
article Asp.net页面的生命周期
介绍A

(No rating)  6-22-2012    Views: 1028   

用户评语

添加评语
当前还没有评语.


.: .: .: .: .:
[ 登陆 ]
北京护航科技有限公司 2006

Novots Technologies Limited