<marquee width=358>欢迎来到月影社区,希望这里可以成为您美丽的梦幻花园,如果你觉得这里好请分享给您的朋友!- wf66.com</marquee> 将月影社区设置为您的首页将月影社区地址加入到您的收藏栏
月影社区时尚音乐音乐查询IP手机许愿之瓶最新更新文件加密访客留言爱音乐
欢迎您,首页 >> 信息中心 >> 基于FORM的验证

请输入您关键字:


基于FORM的验证

推荐查看本文HTML版本

基于FORM的验证,实际上是允许应用程序定义自己的验证画面和可信性验证。当用户进入时,出现事先定义的画面并请求输入验证要素,输入完毕,用用户逻辑对输入验证,通过,则进入应用,否则,返回起始输入画面。基于FORM的验证,通常都采用cookies技术来实现验证任务。启用基于FORM的验证,是在config.web中设置<authentication mode=”Cookie” />来实现的。

例如:采用基于Form的验证方式,拒绝匿名用户进入的配置段如下:
<!--config.web->

<configuration>
    <security>
        <authentication mode="Cookie"/>
        <authorization>
            <deny users="?" />
        </authorization>
    </security>
</configuration>

其中,<authorization>一节中,用deny标识表示禁止某种用户,“?”代表匿名用户,“*”代表所有用户,当然在users后也可以跟指定的用户,表示只拒绝指定的用户。

此外,在配置节中还有一个cookie标识,它规定了Cookie的行为,也较为重要。Cookie标识有三个属性:
•decryptionkey 用于指定对cookie加解密的密钥。如果不指定或指定为autogenerate,密钥将采用Crypto API产生的系统密钥。当指定为autogenerate时,产生的密钥和机器相关,因而不能跨机器和平台,除非显示给出密钥。
•loginurl 验证页面。当用户验证失败以后,被定向到的页面,它可以是在本地,也可以是其他机器上。
•cookie  指定用于验证任务的cookie的名字。由于在同一台机器上,可能存在多个应用,而同一应用使用一个cookie名,所以同一机器上的cookie名字不能相同。

例如,在config.web中有如下定义:
<!--config.web -->

<security>
    <authentication mode="Cookie">
        <cookie decryptionkey="autogenerate" loginurl="login.aspx"
 cookie=".ASPXCOOKIEDEMO" /> 
    </authentication>
</security>

从这段配置,我们可以知道cookie的密钥由系统产生,当验证失败以后,页面将跳转至login.aspx,cook名为“.ASPXCOOKIEDEMO”

在基于FORM的验证中,一个常用到的对象是CookAuthentication。
CookAuthentication有4个比较重要的方法:
•RedirectFromLoginPage方法,它通常在验证成功以后,从用户的验证画面返回用户开始请求的页面。它带有两个参数,第一个为cookie要记录的用户名,第二个表明是否记录到永久性cookie中。
例如:
 CookieAuthentication.RedirectFromLoginPage(“Chen”,True)
表示把用户“Chen”记录到硬盘上的cookie记录中,然后跳转到用户原先请求的页面上。

•GetAuthCookie 从cookie中取得指定用户名的值。它的参数和RedirectFromLoginPage方法是一样的。
例如:
CookieAuthentication.GetAuthCookie(“Chen”,Flase)
表示从当前连接的cookie中取出用户名为chen的值

•SetAuthCookie 把指定用户名存入cookie中。参数和GetAuthCookie方法一致
例如:
CookieAuthentication.SetAuthCookie(“Chen”,Flase)
表示把用户“Chen”记录到连接过程中存在的cookie中

•SignOut 删除当前用户的验证Cookie,它不会理会Cookie到底是在内存,还是在硬盘上。

下面我将介绍一个完整的例子:
application\delault.aspx文件:

<%@ Import Namespace="System.Web.Security " %>

<html>

  <script language="VB" runat=server>[月影读书频道 http://wf66.com/]
 
    Sub Page_Load(Src As Object, E As EventArgs)
        Welcome.Text = "Hello, " + User.Identity.Name
    End Sub

    Sub Signout_Click(Src As Object, E As EventArgs)
        CookieAuthentication.SignOut()
  ‘删去Cookies
        Response.Redirect("login.aspx")
        ‘返回验证画面
    End Sub

  </script>

  <body>
 
    <h3><font face="Verdana">使用Cookie验证方式</font></h3>
   
    <form runat=server>
   
      <h3><asp:label id="Welcome" runat=server/></h3>
    [月影社区 http://wf66.com/]
      <asp:button text="Signout" OnClick="Signout_Click" runat=server/>
     
    </form>[月影社区 http://wf66.com/]
   
  </body>

</html>


application\login.aspx文件:

<%@ Import Namespace="System.Web.Security " %>

<html>

  <script language="VB" runat=server>

    Sub Login_Click(Src As Object, E As EventArgs)
        If (UserEmail.Value = "test@263.net" Or UserEmail.Value = "try@163.net") And UserPass.Value = "password"
 ‘如果用户为test@263.net或者是try@163.net而且口令为password,就认为通过验证
CookieAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked)
     ‘记录Cookie并且跳转到请求的页面
        Else
            Msg.Text = "非法用户或口令: 请重试"
        End If
    End Sub

  </script>

  <body>
   
    <form runat=server>
   
      <h3><font face="Verdana">登录窗口</font></h3>

      <table>
        <tr>
          <td>Email地址:</td>
          <td><input id="UserEmail" type="text" runat=server/></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="UserEmail" Display="Static" ErrorMessage="*" runat=server/></td>
        </tr>
        <tr> 
          <td>口令:</td>
          <td><input id="UserPass" type=password runat=server/></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="UserPass" Display="Static" ErrorMessage="*" runat=server/></td>
        </tr>
        <tr>
          <td>永久性Cookie:</td>
          <td><ASP:CheckBox id=PersistCookie runat="server" /> </td>
          <td></td>
        </tr>
      </table>
     
      <asp:button text="Login" OnClick="Login_Click" runat=server/>
     
      <p>
     
      <asp:Label id="Msg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat=server />

    </form>
  </body>

</html>

config.web文件:

<configuration>

  <security>
   
<authentication mode="Cookie">
<!--采用cookie验证方式-->
<cookie decryptionkey = "autogenerate" loginurl = "login.aspx" cookie = ".ASPXUSERDEMO" />
<!--密钥系统产生,登录页面为login.aspx,记录的Cookie名为.aspuserdemo--> 
    </authentication>
 <authorization>
<deny users="test@263.net" />
<!--虽然程序中有两个用户test@263和try@163.net可以进入,但此处封掉test@263.net,观察deny标识是否有效-->
<deny users="?" />
<!--拒绝匿名用户anonymous-->
    </authorization>
      </security>
  <globalization requestencoding="UTF-8" responseencoding="UTF-8" />
</configuration>

我们还可以在config.web中设置用户和密码,当用户在验证窗口输入用户和密码后,将其带入CookieAuthenticationManager.Authenticate,有它来验证是否是合法用户。
在config.web中设置用户和密码使用credentials标识,它有一个属性passwordformat,决定口令存储的方式。Passwordformat可以为以下值:
•Clear 口令以纯文本方式存储。
•SHA1 口令以SHA1方式存储。
•MD5  口令以MD5方式存储。

例如: 在一个配置文件中,

<!--config.web-->

<configuration>

<security>
    <authentication>
        <credentials passwordformat=”SHA1” >
            <user name=”Li” password=”GASDFSA9823598ASDBAD”/>
            <user name=”Chen” password=”ZASDFADSFASD23483142”/> 
        </credentials>
    </authentication>
</security>

</configuration>
从这个例子,我们看到credentials标识中的passwordformat为SHA1,所以下面的用户的密码是以SHA1方式加密以后的格式。在<credentials>和</credentials>之间我们定义了两个用户“Chen”和”Li”,其密码不可识别。
4.5.4 授权用户和角色
URL授权控制对资源的访问权限。它可以使一些用户和角色对资源有存取权限,也可以拒绝某些用户和角色对资源的存取。甚至它还可以决定能够存取资源的HTTP方法(例如:不允许get,允许POST等等)。
 对于授权用户和角色的控制,asp.net通过配置文件config.web中的<authorization>标识段来实现。<allow>标识表示允许对资源的访问,<deny>标识表示拒绝对资源的访问。
 它们都有两个属性,users和roles分别表示用户和角色。
 我们来看一个实例:
 <!--config.web->
 …
 <configuration>
<security>
    <authorization>
        <allow users="nobody@163.net" />
        <allow roles="Admins" />
        <deny users="*" />
    </authorization>
</security>
</configuration>
 …
 它表明了这样一个事实,用户“nobody@163.net“和角色Admins有访问本站点的权力,其他用户对本站点的访问将被拒绝。也就是用户nobody@163.net和角色Admins分别是授权用户和授权角色。

 同样,我们可以定义多个用户或者角色被授权或禁止,它们之间以“,“分隔。
例如:
 …
 <allow users=”Chen,Li,Wang” />
 <deny roles=”Admins,Everyone” />
 …
表示用户“Chen”、“Li”、”Wang”是授权用户,但是角色为“Admins”或者是”Everyone”的被排除在外。
 它的效果和分开写是一样的,如上例也可以写为:
 …
 <allow users=”Chen” />
 <allow users=”Li” /> 
<allow users=”Wang” />
<deny roles=”Admins” />
<deny roles=”Everyone” />

 此外,还可以决定用户的某种HTTP方法是否可以被允许,方法是使用verb属性来表明对那种HTTP方法操作。
 例如:

  <allow verb=post users=”Chen,Li” />
  <deny verb=get roles=”everyone” />

表示允许用户“Chen”,”Li“采用post方法访问资源,而拒绝角色everyone的get方式对资源的访问。

符号“*“和”?“在<allow>和<deny>标识中有特殊的含义。”*“表示任何用户,”?“表示匿名用户。
例如:
 …
 <authorization>
  <allow users=”*” />
  <deny users=”?” />
 </authorization>
表示除了匿名用户以外的所有用户都被允许访问本站点。

由前面的学习我们知道,在asp.net中应用是树型分层的,所以其配置文件也是呈层次结构,这也就导致了用户和角色的授权不是单一的结果,它要取决于沿树型结构上所有配置文件指定的结果的合集,而且越接近叶节点的配置越是有效。
例如:访问http:www.my.com/MyApp/a.aspx
在http:www.my.com的根目录下的配置文件config.web有如下内容:

<security>[月影读书频道 http://wf66.com/]
<authorization>
 <allow users=”*” />
</authorization>
</security>

而在MyApp目录下有配置文件config.web内容如下:

<security>
<authorization>
  <allow users=”Chen” />
<deny users=”*” />
</authorization>
<security>

那么,授权用户的集合到底是怎样的呢?asp.net首先取得站点根目录下的配置,即所有用户都被允许访问,然后asp.net进入Myapp的目录取得其下的配置,除用户“Chen”以外所有的用户被拒绝,最后合并两个授权集合,并且如果两者之间有冲突,以后者为准。所以最终的授权集合为用户“Chen”,其他用户被拒绝。


基于FORM的验证 2006-9-20
转到本主题第:[ 1 ]
相关评论

暂无评论

总计0页 [ ]上一页 下一页
发表评论(揪错)
呢称: * 您尚未登陆,请登录
来自: *
内容:
 

(为防止非法信息,您的言论提交后需要审核才能正常显示)

文学
精品文萃 情感天地 言情小说
网络小说 玄幻小说 悬疑恐怖
武侠小说 古典品谈 外国名著
儿童文学 会员原创 学习园地
杂谈其它
娱乐
爆笑网文 星座占卜 影音动漫
娱乐新闻 影视剧情
诗词
青竹诗歌 个人诗集 宋词雅赏
全唐诗录
新闻
国际新闻 国内新闻 科技新闻
体育新闻
图片
图文专区 艺术长廊 桌面壁纸
精品素材 像素图片
漫画
单幅漫画 爆笑四格 连环漫画
电脑
电脑入门 图形图像 编程开发
游戏
我爱Q宠 最新攻略 最新秘籍
游戏新闻 技巧心得
经济
帕格节电 财经资讯 股市证券
生活
百科知识 外语学院 潮流时尚
健康医疗 宠物花卉 汽车地带
行走天下
美食
面食甜点 家常菜品 药膳食疗
美食天下 烹饪技巧 松辽风味
燕京风味 巴蜀风味 滇黔风味
赣江风味 徽皖风味 闽台风味
齐鲁风味 中州风味 岭南风味
荆楚风味 三晋风味 淞沪风味
苏扬风味 潇湘风味 钱塘风味
民族风味 素斋仿荤
营销
管理杂谈 谈经论道 培训激励
经营战略 职场生涯 公关交际
关于我们版权声明本站导航友情连结作品演示 TOP↑
本论坛言论纯属发表者个人意见,与£月影社区£立场无关。 皖ICP备16024038号-1
禁止发布任何色情/政治/反动相关信息让我们共同来营造一个属于我们的梦幻家园
Copyright ©2001-2006 MoonShadow. All rights reserved.  Version 4.0  Licence 2006.4.2
建站天数:7213天 本站基于ASP+JS构建,完全自主开发,版权归属月影社区 管理员QQ:23165062 Time:1734ms