Files
g.hnyhua.cn/Mtxfw.Utility/Authentication.cs
2026-02-07 15:48:27 +08:00

169 lines
6.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}
}