排球

ASP.NET 2.0 中的窗体身份验证

2019-09-12 18:07:56来源:励志吧0次阅读

窗体身份验证 Cookie  调用 FormsAuthentication.SetAuthCookie 或FormsAuthentication.RedirectFromLoginPage 方法时,FormsAuthentication 类自动创建身份验证 Cookie。

典型的窗体身份验证 Cookie 中包括以下属性:

•Name。该属性指定 Cookie 的名称。

•Value。该属性指定 Cookie 的值。

在典型的窗体身份验证 Cookie 中,该值包含一个经过加密和签名的 FormsAuthenticationTicket 对象的字符串表示形式。该 Cookie 包含以下属性:

•Expires。该属性指定 Cookie 的到期日期和时间。仅当代码指示应该颁发一个持久的窗体身份验证 Cookie,窗体身份验证才设置该值。

•Domain。该属性指定与 Cookie 关联的域。默认值为 null。

•HasKeys。该属性指出 Cookie 是否有子项。

•HttpOnly。该属性指定是否可以通过客户端脚本访问该 Cookie。在 ASP.NET 2.0 中,该值始终设置为 true。Internet Explorer 6 Service Pack 1 支持该 Cookie 属性,从而防止客户端脚本从 document.cookie 属性访问该 Cookie。如果尝试从客户端脚本访问该 Cookie,则返回一个空字符串。无论何时用户浏览到当前域中的 Web 站点,该 Cookie 仍然发送至服务器。

注 不支持 HttpOnly Cookie 属性的 Web 浏览器要么忽略该 Cookie,要么忽略该属性,这意味着会话仍然容易受到跨站点脚本的攻击。

•Path。该属性指定 Cookie 的虚拟路径。默认值为"/",代表根目录。

•Secure。该属性指出 Cookie 是否应该仅通过 HTTPS 连接传输。Secure 属性应设置为 true,以便该 Cookie 可以受 SSL 加密的保护。

•Version。该属性指定 Cookie 的版本号。

创建身份验证 Cookie

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

以下是引用片段:

FormsAuthenticationTicketticket=newFormsAuthenticationTicket(1,

"userName",

DateTime.Now,

DateTime.Now.AddMinutes(30),//valueoftimeoutproperty

false,//ValueofIsPersistentproperty

String.Empty,

FormsAuthentication.FormsCookiePath);

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

以下是引用片段:

stringencryptedTicket=FormsAuthentication.Encrypt(ticket);

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

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

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

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

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

以下是引用片段:

HttpCookieauthCookie=newHttpCookie(

FormsAuthentication.FormsCookieName,

encryptedTicket);

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

以下是引用片段:

authCookie.Secure=true;

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

•设置适当的 Cookie 属性。如果需要,设置 Cookie 的 path、domain 和 expires 属性。

•将 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 用于进行身份验证。

查看本文来源

心梗严重不
热淋清颗粒喝多久
宝宝咳嗽了怎么办
小孩化痰止咳吃什么药最好
分享到: