文谷首页 | 业界传真 | 网络技术 | 服务器 | 数据库 | 存储技术 | 系统安全 | 无线技术 | Cisco | .Net | Windows | Linux | Unix | Java
电子商务 | 网站工程 | 网页设计 | 平面设计 | 多媒体 | 编程语言 | Oracle | MSSQL | Photoshop | ASP | PHP | 实用技巧 | 进程查询 | 文谷论坛
 websphere   .net framework
您现在的位置: IT文谷 >> 开发平台 >> .net framework >> ASP.NET >> 文章正文
ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证
ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证
ASP.NET中的窗体身份验证

ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证

 

创建身份验证 Cookie

通过 formsauthentication 类创建身份验证 Cookie,如下所示。用户经过验证后,formsauthentication 类在内部创建一个 formsauthenticationticket 对象,方法是指定 Cookie 名、Cookie 版本、目录路径、Cookie 颁发日期;Cookie 到期日期、是否应该保留 Cookie,以及用户定义的数据(可选)。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,

        "userName",

        DateTime.Now,

        DateTime.Now.AddMinutes(30), // value of time out property

        false, // Value of IsPersistent property

        String.Empty,

        FormsAuthentication.FormsCookiePath);

接下来,如果 forms 元素的 protection 属性设置为 allencryption,则窗体身份验证使用 encrypt 方法对窗体身份验证票进行加密和签名。

string encryptedTicket = FormsAuthentication.Encrypt(ticket);

以下文本显示了当 protection 属性设置为 all 时使用的过程:

创建序列化窗体身份验证票。创建票证的字节数组表示形式。

对窗体身份验证票进行签名。字节数组的消息身份验证代码 (MAC) 的值,由使用 machinekey 元素的 validationvalidationkey 属性指定的算法和密钥进行计算。默认情况下,使用 SHA1 算法。

对窗体身份验证票进行加密。已经创建的第二个字节数组使用 formsauthentication 类的 encrypt 方法进行加密。该 encrypt 方法在内部使用由 machinekey 元素上的 decryptiondecryptionkey 属性指定的算法和密钥。ASP.NET 1.1 版在默认情况下使用 3DES 算法。ASP.NET 2.0 版在默认情况下使用 Rinjdael (AES) 算法。

根据需要创建 HTTP Cookie 或查询字符串。然后,如果窗体身份验证针对 cookieless 身份验证进行了配置,则加密的身份验证票添加到 httpcookie 对象。使用以下代码创建该 Cookie 对象:

HttpCookie authCookie = new HttpCookie(

                            FormsAuthentication.FormsCookieName, 

                            encryptedTicket);

                        

将窗体身份验证cookie 设置为安全的。如果窗体身份验证票配置为使用 SSL,则 httpcookie.secure 属性设置为 true。这表明浏览器仅通过 HTTPS 连接发送 Cookie。

authCookie.Secure = true;

                        

设置 HttpOnly 。在 ASP.NET 2.0 中,始终设置该位。

设置适当的 Cookie 属性。如果需要,设置 Cookie 的 pathdomainexpires 属性。

Cookie 添加到 Cookie 集合。将身份验证 Cookie 添加到要返回给客户端浏览器的 Cookie 集合。

Response.Cookies.Add(authCookie);

                        

每次在身份验证之后接收一个后续请求时,FormsAuthenticationModule 类都会从身份验证 Cookie 中检索身份验证票,对其进行解密,计算哈希值,并比较该 MAC 值,以帮助确保该 Cookie 未被篡改。最后,验证该窗体身份验证票中包含的到期时间。

ASP.NET 并不依赖于 Cookie 的到期日期,因为该时间很容易伪造。

角色授权

在 ASP.NET 2.0 中,角色授权已经得到简化。对用户进行身份验证或者将角色细节添加到身份验证 Cookie 时,不再需要检索角色信息。.NET Framework 2.0 包括一个角色管理 API,它使您能够创建和删除角色,将用户添加到角色以及从角色删除用户。该角色管理 API 将其数据存储在一个基础数据存储中,它通过针对该数据存储的适当角色提供程序访问该存储。以下角色提供程序为 .NET Framework 2.0 附带,可以与窗体身份验证一起使用:

SQL Server。它是默认的提供程序,将角色信息存储在 SQL Server 数据库。

授权管理器 (AzMan)。该提供程序使用 XML 文件、Active Directory 或 Active Directory 应用程序模式 (ADAM) 中的一个 AzMan 策略存储作为其角色存储。它通常用于 Intranet 或 Extranet 方案中,其中 Windows 身份验证和 Active Directory 用于进行身份验证。

有关如何使用角色管理 API 的详细信息,请参阅 How To: Use Role Manager in ASP.NET 2.0。

 

Cookieless 窗体身份验证

asp.net 2.0 支持 cookieless 窗体身份验证。该功能由 forms 元素的 cookieless 属性控制。该属性可以设置为以下四个值之一:

UseCookies。该值强制 formsauthenticationmodule 类使用 Cookie 传输身份验证票。

UseUri。该值指示 formsauthenticationmodule 类重写 URL 来传输身份验证票。

UseDeviceProfile。该值指示 formsauthenticationmodule 类查看浏览器功能。如果浏览器支持 Cookie,则使用 Cookie;否则,重写 URL。

AutoDetect。该值通过一个动态检测机制指示 formsauthenticationmodule 类检测浏览器是否支持 Cookie。如果检测逻辑表明不支持 Cookie,则重写 URL。

如果应用程序配置为使用 cookieless 窗体身份验证,并且正在使用 formsauthentication.redirectfromloginpage 方法,则 formsauthenticationmodule 类自动设置 URL 中的窗体身份验证票。以下代码示例显示了典型 URL 在重写后的外观:

http://localhost/CookielessFormsAuthTest/(F(-k9DcsrIY4CAW81Rbju8
KRnJ5o_gOQe0I1E_jNJLYm74izyOJK8GWdfoebgePJTEws0Pci7fHgTO
UFTJe9jvgA2))/Test.aspx

括号中的 URL 部分包含 Cookie 通常将包含的数据。该数据在请求处理过程中由 ASP.NET 删除。该步骤由 ASP.NET ISAPI 筛选器执行,而不是在 httpmodule 类中执行。如果从一个 .aspx 页读取 request.path 属性,您在 URL 中不会看到任何额外的信息。如果重定向请求,URL 将自动重写。

难以保证 URL 中包含的身份验证票的安全。当安全性极为重要时,您应该使用 Cookie 存储身份验证票。

 

成员身份和登录控件

asp.net 2.0 引入了成员身份功能和一组登录 Web 服务器控件,它们简化了使用窗体身份验证的应用程序的实现。

成员身份为应用程序用户提供凭据存储和管理。它还提供一个成员身份 API,可以在使用窗体身份验证时简化用户凭据的验证任务。该成员身份功能构建于提供程序模型之上。该模型允许实现和配置指向不同用户存储的不同提供程序。ASP.NET 2.0 包括以下成员关系提供程序:

Active Directory 成员关系提供程序。该提供程序使用 Active Directory 或 Active Directory 应用程序模式 (ADAM) 用户存储。

SQL Server 成员关系提供程序。该提供程序使用 SQL Server 用户存储。

还可以添加对自定义用户存储的支持。例如,可以添加对其他轻量级目录访问协议 (LDAP) 目录或其他现有公共标识存储的支持。为此,创建一个从 membershipprovider 抽象基类继承的自定义提供程序。

asp.net 登录控件自动使用成员身份和窗体身份验证,并封装提示用户输入凭据,验证用户,恢复或替换密码等所需的逻辑。实际上,ASP.NET 登录控件在窗体身份验证和成员身份上提供一个抽象层,并且取代了您使用窗体身份验证时通常必须进行的大多数或全部工作。

有关使用成员身份功能和登录控件的详细信息,请参阅 How To: Use Membership in ASP.NET 2.0。

 

Web 场方案

在 Web 场中,无法确保哪个服务器将处理连续请求。如果用户在一台服务器上经过身份验证,但下一个请求在另一台服务器上进行,则身份验证票将导致验证失败并请求用户重新进行身份验证。

machineKey 元素中的 validationkeydecryptionkey 属性用于对窗体身份验证票进行哈希操作和加密。这些属性的默认值为 autogenerate.isolateapps。这些密钥是针对每个应用程序自动生成的,在每台服务器上都不同。因此,在一台计算机上加密的身份验证票无法在 Web 场中的另一台计算机或者同一台 Web 服务器上的另一个应用程序中进行解密和验证。

为了解决该问题, Web 场中所有计算机上的 validationkey 和 decryptionkey 值都必须相同。有关配置 machinekey 元素的详细信息,请参阅 How To: Configure MachineKey in ASP.NET 2.0。

 

其他资源

How To: Protect Forms Authentication in ASP.NET 2.0

How To: Use Forms Authentication with SQL Server in ASP.NET 2.0

How To: Use Forms Authentication with Active Directory in ASP.NET 2.0

How To: Use Forms Authentication with Active Directory in Multiple Domains in ASP.NET 2.0

上一页  [1] [2] [3] 

上一页  [1] [2] [3] 

ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证


  • 上一篇文章:

  • 下一篇文章:
  • 进入论坛讨论

    相关文章
    基于.NET的多线程编程入门
    Microsoft .NET 框架资源基础
    VS2005常用插件搜罗
    .net中用GDI+提高gif图片保存画质
    VS.NET:通过Web服务瞄准电子商务
    对象设计中创建VS使用
    安装/初始化/个性化DotNetNuke
    介绍dotnet原动力(DNN)
    GDI+编程10个基本技巧
    DTE .NET工程的自动化编译
    .Net中如何操作IIS的原理分析
    VS.NETRC5无法创建Add-IN工程
    热门文章最新推荐

    版权与免责声明:
    ① 本网转载其他媒体稿件是为传播更多的信息,此类稿件不代表本网观点,版权归原作者所有,本网不承担此类稿件侵权行为的连带责任。
    ② 在本网BBS上发表言论者,文责自负。
    ③ 如您因版权等问题需要与本网联络,请在30日内联系 。
    ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证
    ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证2006-7-15ASP.NET中的窗体身份验证

    .net framework专题
    人气排行
  • 此栏目下没有文章
  • 最近更新
    普通文章技术介绍 新数据网格简介
    普通文章.NET 开发人员该下载的十个必备
    普通文章深入剖析Asp.net资源文件
    普通文章通过事例学习.net的WebForms技
    普通文章ASP.NET Tips1---合并多个字段
    普通文章微软明年1月份出台.NET专业开发
    普通文章微软下月底前完成Vista大部分功
    普通文章揭开微软 .NET 认证考试的面纱
    普通文章Visual Studio:Microsoft开发工
    普通文章Visual Studio:Microsoft开发工
    全站热点       
    最新推荐
    关于文谷 | 联系文谷 | 免责声明 | 文谷社区
    Tel: 0577-65690019    E-mail: ichenjian@gmail.com    MSN:ichenjian@hotmail.com    QQ:2911194
    Copyright © 2004-2006 wengu.org 文谷 All Rights Reserved
    浙ICP备05000327号