C# FormsAuthentication 实现基础认证完整示例
本文提供在 C# ASP.NET 环境中使用 FormsAuthentication 类进行基本身份验证的代码示例,包括如何加密存储用户凭据到 Cookie、判断登录状态以及注销操作。
C# FormsAuthentication 核心用法
FormsAuthentication 是 .NET Framework 中用于处理基于窗体的身份验证(Forms Authentication)的核心类。它主要用于在 Web 应用中管理用户的登录状态,通常将经过加密的用户数据存储在 Cookie 中,以便在后续请求中进行身份识别。
以下是一个完整的静态工具类 Authentication 的实现,封装了常用的身份验证操作:
using System;
using System.Web;
using System.Web.Security;
namespace AuthTest
{
public class Authentication
{
/// <summary>
/// 设置用户登陆成功凭据(Cookie存储)
/// </summary>
/// <param name="UserName">用户名</param>
/// <param name="PassWord">密码</param>
/// <param name="Rights">权限</param>
public static void SetCookie(string UserName,string PassWord,string Rights)
{
//构建用户数据字符串,格式为 UserName#PassWord#Rights
String UserData = UserName + "#" + PassWord+"#"+Rights;
//创建FormsAuthenticationTicket对象
//参数依次为:版本号、用户名、创建时间、过期时间、是否持久化、UserData
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, // Version
UserName, // Name
DateTime.Now,// IssueDate
DateTime.Now.AddMinutes(60), // Expiration (60 minutes)
false, // IsPersistent
UserData // UserData
);
//加密Ticket
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
//创建Cookie并添加至响应
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
HttpContext.Current.Response.Cookies.Add(cookie);
}
/// <summary>
/// 判断用户是否登陆
/// </summary>
/// <returns>True:已登录, False:未登录</returns>
public static bool isLogin()
{
return HttpContext.Current.User.Identity.IsAuthenticated;
}
/// <summary>
/// 注销登陆
/// </summary>
public static void logOut()
{
FormsAuthentication.SignOut();
}
/// <summary>
/// 获取凭据中的用户名
/// </summary>
/// <returns>用户名</returns>
public static string getUserName()
{
if (isLogin())
{
string strUserData = ((FormsIdentity)(HttpContext.Current.User.Identity)).Ticket.UserData;
string[] UserData = strUserData.Split('#');
if (UserData.Length != 0)
{
return UserData[0];
}
else
{
return "";
}
}
else
{
return "";
}
}
/// <summary>
/// 获取凭据中的密码
/// </summary>
/// <returns>密码</returns>
public static string getPassWord()
{
if (isLogin())
{
string strUserData = ((FormsIdentity)(HttpContext.Current.User.Identity)).Ticket.UserData;
string[] UserData = strUserData.Split('#');
if (UserData.Length!=0)
{
return UserData[1];
}
else
{
return "";
}
}
else
{
return "";
}
}
/// <summary>
/// 获取凭据中的用户权限
/// </summary>
/// <returns>用户权限</returns>
public static string getRights()
{
if (isLogin())
{
string strUserData = ((FormsIdentity)(HttpContext.Current.User.Identity)).Ticket.UserData;
string[] UserData = strUserData.Split('#');
if (UserData.Length!=0)
{
return UserData[2];
}
else
{
return "";
}
}
else
{
return "";
}
}
}
}
关键功能说明
第1步:创建并加密认证Ticket
目的: 将用户身份信息序列化并加密,安全地存储于客户端 Cookie 中。
入口: SetCookie(string UserName, string PassWord, string Rights)
动作: 实例化 FormsAuthenticationTicket,指定有效期(如60分钟),调用 FormsAuthentication.Encrypt 方法对 Ticket 进行加密,防止数据篡改。随后创建 HttpCookie 并将其附加到当前 HTTP 响应中。
重要参数: IsPersistent 设为 false 表示会话级 Cookie,浏览器关闭即失效;若设为 true 则为持久化 Cookie。
完成状态: 浏览器收到 Set-Cookie 头,且 Cookie 值为加密后的 Ticket 字符串。
第2步:检查用户登录状态
目的: 在页面或控制器中快速判断当前请求是否来自已认证用户。
入口: isLogin()
动作: 直接访问 HttpContext.Current.User.Identity.IsAuthenticated。
完成状态: 返回布尔值 true 或 false。
第3步:注销当前会话
目的: 清除服务器端认证标识并通知客户端删除相关 Cookie。
入口: logOut()
动作: 调用 FormsAuthentication.SignOut(),该方法会自动清除 FormsAuth 相关的 Cookie 并重定向至默认登录页(如果配置了重定向)。
完成状态: 用户的认证状态被撤销,后续请求需重新登录。
第4步:从 Ticket 中提取用户数据
目的: 获取存储在 UserData 字段中的自定义信息(如用户名、权限等)。
入口: getUserName(), getPassWord(), getRights()
动作: 首先通过 (FormsIdentity)HttpContext.Current.User.Identity 获取当前的 FormsIdentity 对象,然后读取其 Ticket.UserData 属性。由于 UserData 是以 "#" 分隔的字符串,需使用 Split('#') 解析出具体字段。
注意: 原文代码中 getUserName() 返回时调用了 .ToString(),但字符串类型无需额外转换,可直接返回数组元素。
注意事项与安全建议
- 敏感数据存储: 上述示例中将“密码”明文存储在 UserData 中仅用于演示。在实际生产环境中,绝对不应将明文密码或其他高敏感数据存入 Cookie。应仅存储用户ID、角色或令牌,敏感校验应在服务器端会话(Session)或数据库中比对。
- Cookie安全: 确保启用 HTTPS,并在配置中设置
requireSSL和httpOnly属性,以防止 Cookie 窃取和 XSS 攻击。 - 过期策略: 根据应用需求合理设置 Ticket 的过期时间。长时间有效的 Cookie 会增加安全风险。
以上就是 C# 中 FormsAuthentication 用法的详细内容,更多关于 C# Web 身份验证的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









