开发日志:使用Asp.Net中的"Forms"验证方式,操作用户权限
一、web.config设置
<machineKey validationKey="DD305F238C8F26103323F10B1A655ED9FA7DBB7A" decryptionKey="70DE128000E565A7F8441A4C091C11EC8C5BB9B4D4EDA7A1" validation="SHA1"/>
<authentication mode="Forms">
<forms name="SKAPP.ASPXAUTH" loginUrl="~/login.aspx" protection="All" timeout="10" path="/"/>
</authentication>
1、authentication 节
作用:配置 ASP.NET 身份验证支持(为Windows、Forms、PassPort、None四种)。该元素只能在计算机、站点或应用程序级别声明。<authentication> 元素必需与<authorization> 节配合使用。
示例:
以下示例为基于窗体(Forms)的身份验证配置站点,当没有登陆的用户访问需要身份验证的网页,网页自动跳转到登陆网页。
<authentication mode="Forms" >
<forms loginUrl="logon.aspx" name=".FormsAuthCookie"/>
</authentication>
其中元素loginUrl表示登陆网页的名称,name表示Cookie名称。
2、machineKey
作用:元素对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证
属性
属性 | 说明 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
decryption |
可选的 String 属性。 指定用于对数据进行解密的哈希算法的类型。 此属性可以为下列可能值之一。
此属性是 .NET Framework 2.0 版中的新属性。 默认值为 "Auto"。 |
||||||||||
decryptionKey |
必选的 String 属性。 指定用于对数据进行加密和解密的密钥或者生成该密钥的进程。当 validation 设置为 TripleDES 字段时,该属性用于 Forms 身份验证加密和解密以及视图状态加密。 如果向此属性添加 IsolateApps 修饰符,ASP.NET 将使用每个应用程序的应用程序 ID 为每个应用程序生成一个唯一的加密密钥。IsolateApps 也是默认值的一部分。 如果您需要在 Web 服务器网络(网络场)中支持配置,请手动设置此属性以确保配置保持一致。 此属性可以为下列可能值之一。
默认值为 "AutoGenerate,IsolateApps"。 |
||||||||||
validation |
必选的 MachineKeyValidation 属性。 指定用来验证数据的加密类型。 此属性可以为下列可能值之一。
默认值为 "SHA1"。 |
||||||||||
validationKey |
必选的 String 属性。 指定用于验证加密数据的密钥。当 enableViewStateMAC 为 true 时,validationKey 用于创建消息身份验证代码 (MAC),以确保视图状态未被篡改。validationKey 还可用于生成进程外、应用程序特定的会话 ID,以确保每个会话具有独立的会话状态变量。 如果向 ValidationKey 值添加 IsolateApps 修饰符,ASP.NET 将使用每个应用程序的应用程序 ID 为每个应用程序生成一个唯一的加密密钥。IsolateApps 也是默认值的一部分。 如果您需要在 Web 服务器网络(网络场)中支持配置,请手动设置 ValidationKey 属性以确保配置保持一致。 validationKey 属性可以为下列可能值之一。
默认值为 "AutoGenerate,IsolateApps"。 |
二、记录用户信息
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, //票据版本号
MemberID + ";" + txtMemberNo.Text, //要记录的用户信息,在这里用多项信息用“;”号分隔
DateTime.Now, //用户信息记录时间
DateTime.Now.AddMinutes(30), //用户信息过期时间
true, //以Cookies的方式记录用户信息
dr["Roles"].ToString(), //同时写入记录信息的用户其他信息,这里记录了用户权限
FormsAuthentication.FormsCookiePath //写入Cookies的路径
);
string hash = FormsAuthentication.Encrypt(ticket);//加密要写入Cookies的用户信息
HttpCookie cookie = new HttpCookie(
FormsAuthentication.FormsCookieName, //要写入的Cookies的名称
hash //加密后的用户信息
);
if (ticket.IsPersistent) //如果用户信息保存是持久性的
cookie.Expires = ticket.Expiration;//写入Cookies的过期日期
Response.Cookies.Add(cookie);//写入Cookies
三、读取用户信息
if(HttpContext.Current.User.Identity.IsAuthenticated)//用户是否通过验证
{
string[] parts = HttpContext.Current.User.Identity.Name.Split(';');//返回记录的用户信息
return Convert.ToInt32(parts[0]);
}
else
return null;