在asp.net使用web.config身份验证
2008-09-07 16:58
806 查看
asp.net中使用基于角色的身份Forms验证,大致分为四个步骤
1.配置系统文件web.config
timeout="20" path="/" />
标签中的name表示指定要用于身份验证的 HTTP Cookie. 默认情况下,name 的值是 .ASPXAUTH。采用此种方式验证用户后,以此用户的信息建立一个FormsAuthenticationTicket类型的身份验证票,再加密序列化为一个字符串,最后将这个字符串写到客户端的name指定名字的Cookie中.一旦这个Cookie写到客户端后,此用户再次访问这个web应用时会将连同Cookie一起发送到服务端,服务端将会知道此用户是已经验证过的.
标签中的loginurl指没有经过身份验证的用户将会自动的定向到loginurl所指向的路径. 如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的Cookie,最后将浏览器重定向到用户初试请求的页面.其中用System.Web.Security.FormsAuthentication.RedirectFromLoginPage ()方法实现重定向.
标签中的timeout和path,是提供了身份验证票写入到Cookie过期时间和默认路径
2.在受保护的文件夹如Manage下创建一web.config文件,内容如
注:此配置内容也可以加入到系统的web.config文件中,注意加入位置:
........
3.登录页
//登录按钮
private void Button1_Click(object sender, System.EventArgs e)
{
//实体类AdminUserVO对应AdminUser用户表。
AdminUserVO adminUserVO = new AdminUserVO();
adminUserVO.Uname = UserName.Text.Trim();
adminUserVO.Upwd = UserPwd.Text.Trim();
adminUserVO.LastIP = HttpContext.Current.Request.UserHostAddress;
adminUserVO.LastTime = DateTime.Now;
bool flag = (new LoginDAO()).Chk(adminUserVO);
if (flag)
{
//非角色验证时可以用这句:
//System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text.Trim(),false);
//创建角色验证信息,把role信息写入到UserData中
SetLoginCookie(adminUserVO,adminUserVO.Roles.ToLower());
HttpContext.Current.Response.Redirect("Main.aspx");
}
else
{
HttpContext.Current.Response.Write("登录失败");
}
}
//SetLoginCookie方法
public static void SetLoginCookie(AdminUserVO u, string roles)
{
//建立身份验证票对象
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket (1,u.Uname, DateTime.Now, DateTime.Now.AddMinutes(30), false,roles,"/");
//加密序列化验证票为字符串
string hashTicket = FormsAuthentication.Encrypt (ticket) ;
HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
HttpContext.Current.Response.Cookies.Add(userCookie);
}
FormsAuthenticationTicket参数说明:
FormsAuthenticationTicket(
int version, //设为1,版本号由系统自动提供
string name, //用户标示,获取与身份验证 Cookie 关联的用户名
DateTime issueDate, //Cookie 的发出时间, 设置为 DateTime.Now
DateTime expiration, //获取 Cookie 过期的日期/时间
bool isPersistent, //是否持久性(根据需要设置,若是设置为持久性,在发出cookie时,cookie的Expires设置一定要设置),如果已发出持久的 Cookie,则返回 true。否则,身份验证 Cookie 将限制在浏览器生命周期范围内。
string userData, //获取存储在 Cookie 中的应用程序定义字符串,这里用上面准备好的用逗号分割的role字符串
string cookiePath // 返回发出 Cookie 的路径。注意,窗体的路径设置为"/",这要同发出cookie的路径一致,因为刷新cookie要用这个路径。由于窗体区分大小写,这是为了防止站点中的 URL 的大小写不一致而采取的一种保护措施。
);
4.Global.asax.cs
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpApplication app = (HttpApplication) sender;
HttpContext ctx = app.Context ; //获取本次Http请求的HttpContext对象
if (ctx.User != null)
{
if (ctx.Request.IsAuthenticated == true) //验证过的一般用户才能进行角色验证
{
System.Web.Security.FormsIdentity fi = (System.Web.Security.FormsIdentity)ctx.User.Identity ;
System.Web.Security.FormsAuthenticationTicket ticket = fi.Ticket ; //取得身份验证票
string userData = ticket.UserData;//从UserData中恢复role信息
string[] roles = userData.Split (’,’) ; //将角色数据转成字符串数组,得到相关的角色信息
ctx.User = new System.Security.Principal.GenericPrincipal (fi, roles) ; //这样当前用户就拥有角色信息了
}
}
}
注:如果使用HttpModule的话,此处代码应该加入在AuthenticateRequest事件中。
1.配置系统文件web.config
timeout="20" path="/" />
标签中的name表示指定要用于身份验证的 HTTP Cookie. 默认情况下,name 的值是 .ASPXAUTH。采用此种方式验证用户后,以此用户的信息建立一个FormsAuthenticationTicket类型的身份验证票,再加密序列化为一个字符串,最后将这个字符串写到客户端的name指定名字的Cookie中.一旦这个Cookie写到客户端后,此用户再次访问这个web应用时会将连同Cookie一起发送到服务端,服务端将会知道此用户是已经验证过的.
标签中的loginurl指没有经过身份验证的用户将会自动的定向到loginurl所指向的路径. 如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的Cookie,最后将浏览器重定向到用户初试请求的页面.其中用System.Web.Security.FormsAuthentication.RedirectFromLoginPage ()方法实现重定向.
标签中的timeout和path,是提供了身份验证票写入到Cookie过期时间和默认路径
2.在受保护的文件夹如Manage下创建一web.config文件,内容如
注:此配置内容也可以加入到系统的web.config文件中,注意加入位置:
........
3.登录页
//登录按钮
private void Button1_Click(object sender, System.EventArgs e)
{
//实体类AdminUserVO对应AdminUser用户表。
AdminUserVO adminUserVO = new AdminUserVO();
adminUserVO.Uname = UserName.Text.Trim();
adminUserVO.Upwd = UserPwd.Text.Trim();
adminUserVO.LastIP = HttpContext.Current.Request.UserHostAddress;
adminUserVO.LastTime = DateTime.Now;
bool flag = (new LoginDAO()).Chk(adminUserVO);
if (flag)
{
//非角色验证时可以用这句:
//System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text.Trim(),false);
//创建角色验证信息,把role信息写入到UserData中
SetLoginCookie(adminUserVO,adminUserVO.Roles.ToLower());
HttpContext.Current.Response.Redirect("Main.aspx");
}
else
{
HttpContext.Current.Response.Write("登录失败");
}
}
//SetLoginCookie方法
public static void SetLoginCookie(AdminUserVO u, string roles)
{
//建立身份验证票对象
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket (1,u.Uname, DateTime.Now, DateTime.Now.AddMinutes(30), false,roles,"/");
//加密序列化验证票为字符串
string hashTicket = FormsAuthentication.Encrypt (ticket) ;
HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
HttpContext.Current.Response.Cookies.Add(userCookie);
}
FormsAuthenticationTicket参数说明:
FormsAuthenticationTicket(
int version, //设为1,版本号由系统自动提供
string name, //用户标示,获取与身份验证 Cookie 关联的用户名
DateTime issueDate, //Cookie 的发出时间, 设置为 DateTime.Now
DateTime expiration, //获取 Cookie 过期的日期/时间
bool isPersistent, //是否持久性(根据需要设置,若是设置为持久性,在发出cookie时,cookie的Expires设置一定要设置),如果已发出持久的 Cookie,则返回 true。否则,身份验证 Cookie 将限制在浏览器生命周期范围内。
string userData, //获取存储在 Cookie 中的应用程序定义字符串,这里用上面准备好的用逗号分割的role字符串
string cookiePath // 返回发出 Cookie 的路径。注意,窗体的路径设置为"/",这要同发出cookie的路径一致,因为刷新cookie要用这个路径。由于窗体区分大小写,这是为了防止站点中的 URL 的大小写不一致而采取的一种保护措施。
);
4.Global.asax.cs
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpApplication app = (HttpApplication) sender;
HttpContext ctx = app.Context ; //获取本次Http请求的HttpContext对象
if (ctx.User != null)
{
if (ctx.Request.IsAuthenticated == true) //验证过的一般用户才能进行角色验证
{
System.Web.Security.FormsIdentity fi = (System.Web.Security.FormsIdentity)ctx.User.Identity ;
System.Web.Security.FormsAuthenticationTicket ticket = fi.Ticket ; //取得身份验证票
string userData = ticket.UserData;//从UserData中恢复role信息
string[] roles = userData.Split (’,’) ; //将角色数据转成字符串数组,得到相关的角色信息
ctx.User = new System.Security.Principal.GenericPrincipal (fi, roles) ; //这样当前用户就拥有角色信息了
}
}
}
注:如果使用HttpModule的话,此处代码应该加入在AuthenticateRequest事件中。
相关文章推荐
- 在asp.net使用web.config身份验证
- asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)
- Web.config配置内容中Asp.net 的身份验证问题
- web.config 限定访问权限 Asp.net的身份验证有有三种
- ASP.NET的Web.config文件中可配置哪些身份验证方式
- 通过使用客户端证书调用 Web 服务以便在 ASP.NET Web 应用程序中进行身份验证
- asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)
- ASP.NET 下web.config Forms身份验证的配置
- ASP.NET 下web.config Forms身份验证的配置
- Asp.net WebConfig 身份验证 增加针对PHP 验证 Asp.net WebConfig 身份验证 增加 PHP 验证
- web.config 限定访问权限 Asp.net的身份验证有有三种
- web.config 限定访问权限 Asp.net的身份验证有有三种
- 在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据)
- ASP.NET MVC 3.0(十): MVC 3.0 使用 Forms身份验证
- asp.net中使用窗体身份验证
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- [小技巧][ASP.Net MVC Hack] 使用 HTTP 报文中的 Header 字段进行身份验证
- 使用ASP.Net Forms模式实现WebService身份验证 (转)
- 使用ASP.Net Forms模式实现WebService身份验证