Files
g.hnyhua.cn/Mtxfw.Utility/Authentication.cs

169 lines
6.3 KiB
C#
Raw Permalink Normal View History

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
namespace Mtxfw.Utility
{
/* 2011.2.27 by Telesa */
/// <summary>
/// FromsAuthentication 身份验证类
/// </summary>
public class Authentication
{
#region
private bool _IsAuthenticated = false;
private string _FormsCookieName = string.Empty;
#endregion
#region
/// <summary>
/// 获取一个值 指示是否验证了请求
/// </summary>
public bool IsAuthenticated
{
get { return _IsAuthenticated; }
}
/// <summary>
/// 获取用于存储 Forms 身份验证票证的 Cookie 名称。默认值是“.ASPXAUTH”。
/// </summary>
public string FormsCookieName
{
get { return _FormsCookieName; }
}
#endregion
#region
/// <summary>
/// 创建一个 Authentication 对象
/// </summary>
public Authentication()
{
_IsAuthenticated = System.Web.HttpContext.Current.Request.IsAuthenticated;
}
#endregion
#region
/// <summary>
/// 将验证过的票据 写在 HttpContext.User 中
/// </summary>
/// <param name="sender">Global全局对象</param>
public void RequestAuthenticate(object sender)
{
try
{
HttpApplication app = sender as HttpApplication;
HttpContext context = app.Context;
if (_IsAuthenticated)
{
FormsIdentity identity = context.User.Identity as FormsIdentity;
FormsAuthenticationTicket ticket = identity.Ticket;
String[] roles = ticket.UserData.Split(',');
context.User = new System.Security.Principal.GenericPrincipal(identity, roles);
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 使用 Cookie 名、版本、过期日期、发布日期、持久性以及用户特定的数据初始化 System.Web.Security.FormsAuthenticationTicket
/// 类的新实例。Cookie 路径设置为在应用程序的配置文件中建立的默认值。
/// </summary>
/// <param name="version">票证的版本号</param>
/// <param name="name">与票证关联的用户名</param>
/// <param name="issueDate">票证发出时的本地日期和时间</param>
/// <param name="expiration">票证过期时的本地日期和时间</param>
/// <param name="isPersistent">如果票证将存储在持久性 Cookie 中(跨浏览器会话保存),则为 true否则为 false。如果该票证存储在 URL 中将忽略此值。Cookie</param>
/// <param name="userData">存储在票证中的用户特定的数据。</param>
public void CreateAuthenticate(int version, string name, DateTime issueDate, DateTime expiration, bool isPersistent, string userData)
{
try
{
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(
version,
name,
issueDate,
expiration,
isPersistent,
userData);
String HachTicket = FormsAuthentication.Encrypt(Ticket);
HttpCookie httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HachTicket);
_FormsCookieName = FormsAuthentication.FormsCookieName;
System.Web.HttpContext.Current.Response.Cookies.Add(httpCookie);
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 使用 cookie 名、版本、目录路径、发布日期、过期日期、持久性以及用户定义的数据初始化 System.Web.Security.FormsAuthenticationTicket
// 类的新实例。
/// </summary>
/// <param name="version">票证的版本号</param>
/// <param name="name">与票证关联的用户名</param>
/// <param name="issueDate">票证发出时的本地日期和时间</param>
/// <param name="expiration">票证过期时的本地日期和时间</param>
/// <param name="isPersistent">如果票证将存储在持久性 Cookie 中(跨浏览器会话保存),则为 true否则为 false。如果该票证存储在 URL 中将忽略此值。Cookie</param>
/// <param name="userData">存储在票证中的用户特定的数据。</param>
/// <param name="cookiePath">票证存储在 Cookie 中时的路径。</param>
public void CreateAuthenticate(int version, string name, DateTime issueDate, DateTime expiration, bool isPersistent, string userData, string cookiePath)
{
try
{
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(
version,
name,
issueDate,
expiration,
isPersistent,
userData,
cookiePath);
String HachTicket = FormsAuthentication.Encrypt(Ticket);
HttpCookie httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HachTicket);
_FormsCookieName = FormsAuthentication.FormsCookieName;
System.Web.HttpContext.Current.Response.Cookies.Add(httpCookie);
}
catch(Exception ex)
{
throw ex;
}
}
/// <summary>
/// 从浏览器中删除 Forms 身份验证
/// </summary>
public void SignOut()
{
FormsAuthentication.SignOut();
}
/// <summary>
/// 跳转到 ReturnUrl 页
/// </summary>
public void GoToUrl()
{
System.Web.HttpContext.Current.Response.Redirect("/_admin/Index.aspx");
}
/// <summary>
/// 跳转到指定页
/// </summary>
public void GoToUrl(string url)
{
System.Web.HttpContext.Current.Response.Redirect(url);
}
#endregion
}
}