锁儿's Blog

skip to my lou

导航

如何将Windows Authentication和ASP.NET Role management结合

Posted on 2006-05-22 15:48  锁儿  阅读(958)  评论(1编辑  收藏  举报
那天为了追踪DNN的安全验证机制,跑到登陆模块搞了半天,才了解到他利用了.net的安全机制Identity和Principal。今天刚好看到这个帖子,就粘过来了。
--------------------------------------------------------------------------------------------------------------------
这里要牵涉到整个.NET框架的安全模型,因为整个.NET都遵循一种统一的安全模型,即Identity(用户)和Principal(角色)
在使用传统的Form验证时,Identity和Principal都是存储于数据库中的,所以你可以不依托.NET机制自己来实现权限校验,而使用Windows Authentication时则不一样了,验证是由domain控制器完成的,所以这就产生了一个问题:Identity校验后Principal中包含的是用户的域帐号角色信息,而我们系统中则使用的是自己的一套角色权限体系(存储于数据库中),所以我们需要在Identity被校验后手动生成一个新的Principal替换域角色信息,这就是为什么Compass要写自己的HttpModule并hook进AuthenticateRequest事件中进行操作了。

结合Windows Authentication和ASP.NET的校验机制有两个显而易见的优点
首先用户登录不用输入用户名和密码了,域控制器会帮你做校验
其次你可以在Web.Config中通过
<location path="folder/filename">
  <system.web>
    <authorization>
      <allow roles="rolename" />
      <deny roles="rolename" />
    </authorization>   
  </system.web>
</location>
来轻松实现基于角色的授权