1. 源码下载:  http://www.asp.net/Downloads/starter-kits/the-beer-house

2. 功能技术点介绍: http://www.codeplex.com/TheBeerHouse

3. 该项目真实网站: http://www.ericengler.com/  

                    前述文章:      TheBeerHouse 网站项目学习笔记(1)----换肤技术  
                                       TheBeerHouse 网站项目学习笔记(2)----个性化管理 
                    必备知识文章:ASP.NET 2.0下实现匿名用户向注册用户的迁移(上) 
                                       ASP.NET 2.0下实现匿名用户向注册用户的迁移(下)

                    摘要: 安全管理是网站设计不可回避的问题,也是网站设计的重用组成部分.这些组成部分都需要对不同的用户进行识别,检查用户是否有权限对那些受限制的网页进行访问,这种方法称为认证(authentication).决定用户可以对哪些内容进行访问,这种方法称为授权(authorization).这两个概念容易弄混淆,那么可以这么来理解: 认证---你是谁?   授权---我已经知道你是谁,你可以做什么? 认证和授权是网站成员权限管理的一部分,包括创建新用户,用户证书管理(包括密码保护机制,例如为遗忘密码的用户进行密码恢复)以及与账户关联的角色管理.通过MS为我们提供的内置权限管理,我们可以快速建立整套网站的权限管理系统.上篇主要讨论"你是谁",下篇主要讨论"我已经知道你是谁,你可以做什么"

     那么我们接下来两篇就是着重讨论TheBeerHouse网站利用MS提供的内部权限管理机制(见开头必备文章链接)进行的认证和授权管理.

     首先来看认证管理,即解决"你是谁"的问题.

      一.用户创建
              首先通过界面右上登录密码下的 " Create new account "进入用户账户创建页面,如下图:
               
     通过上述界面我们可以创建一个用户johnson,密码也是johnson.需要注意的是: 1. 这里注册界面不是多个用单个控件(label和textbox)组成,而是使用了ASP.NET 2.0提供的成员权限管理的控件CreateUserWizard      2. 此界面上注册信息比较单调,还有很多诸如国家,职业等信息在此界面创建用户成功后弹出的下一个个性化信息界面得到设置,如下图:
          
设置好上述可选的信息后,单击最下方的"完成"按钮后,该用户就创建好了.创建好该用户后,系统自动用该帐号登录到首页,并显示欢迎信息:
                                                                 
下面利用必备文章中介绍的知识进入用户管理界面( 停掉刚才运行的网站,在选中解决方案下的网站后,单击菜单"网站"-->"ASP.NET配置"),如下图:
                 -----> 

打开ASP.NET网站管理工具--->  安全  ---> 管理用户 ---> 在johnson用户后单击 "编辑用户" ,可以看到该用户的基本信息和角色如下:
                         

我们可以看到,系统默认建立的用户角色是posters,上述这么五个角色都是在此界面通过ASP.NET网站管理工具建立得到的,利用如下查询命令可以在自定义数据库中得到所有用户的用户名,密码,以及角色,具体见必备知识文章:

               


利用上面四个表联合查询可以得到所有用户信息,我们刚建立的johnson用户也在里面,见红色虚线框.十个用户产生了二十条记录,那是因为同一个用户可以具有多个角色的缘故.
我们可以看到,密码全部经过加密处理,这里的加密方法是对称加密(symmetric encryption)法,该方法使用系统保护密码对所有用户密码加密.这是一种双向加密,可以对密码加密,也可以对其解密.对于用户而言,能够将忘记的密码通过电子邮件发送.

上述解决了认证的第一个问题:创建用户,那么接下来讨论认证的第二个问题---认证过程.

二. 帐号认账过程
     首先看看配置文件web.config中配置节的代码

     <authentication mode="Forms">
        <forms cookieless="AutoDetect" loginUrl="~/AccessDenied.aspx" name="TBHFORMAUTH"/>
     </authentication>

Forms表示本网站采取表单认证方式,而不是Windows方式,如果用后者认证,那么也就是登录了Windows的用户就可以登录网站了,显然在这里是不可取的.那么表单认证方式需要用户提交各种票据,比如用户名和密码等信息,系统判定正确后方可登录.

AccessDenied.aspx页面从名称就可以知道这是当用户访问一个受保护的页面时所要跳转到的页面,通俗讲就是当用户名/密码输入不正确或访问某个页面的权限不够时自动跳转的页面.
下面介绍该页面的效果图和前后台代码以及注释:


情况1:登录用户名或密码不对   

====================================================================================================

情况2:登录用户权限不足

 

===========================================================================

情况3:由登录用户做了注销处理后,  用户切换后,用户名密码对,但访问当前页面的权限不足

AccessDenied.aspx

 

 

AccessDenied.aspx.cs

                                                                                                
请注意:User.Identity.IsAuthenticated 在用户登录成功后会自动返回true,这里是利用了ASP.NET内置的权限管理功能实现的.
那么,上面基本讨论了权限管理的第一个问题---"你是谁?"的问题.下面接着来讨论第二个问题---"我知道你是谁,你可以干什么?"的问题.

       


 

posted on 2008-11-01 09:09  巡山小牛  阅读(1997)  评论(5编辑  收藏  举报