-->

检查身份验证票证过期,而不会影响它(Check authentication ticket expi

2019-09-23 22:18发布

我想实现一个Web应用程序项目在我的网页,可以检查服务器使用AJAX的身份验证票证过期日期/时间。

我使用窗体身份验证与slidingExpiration。

我碰到运行的问题是我无法弄清楚如何在不重新检查它的价值。 我创建了一个简单的页面 - CheckExpiration.aspx - 以下是后面的代码:

  private class AjaxResponse
  {
     public bool success;
     public string message;
     public string expirationDateTime;
     public string secondsRemaining;
     public string issueDate;
  }

  protected void Page_Load(object sender, EventArgs e)
  {
     AjaxResponse ar = new AjaxResponse();
     JavaScriptSerializer js = new JavaScriptSerializer();

     if (HttpContext.Current.User.Identity.IsAuthenticated)
     {
        FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
        string expiration = id.Ticket.Expiration.ToString();

        TimeSpan timeRemaining = id.Ticket.Expiration - DateTime.Now;

        ar.success = true;
        ar.expirationDateTime = expiration;
        ar.issueDate = id.Ticket.IssueDate.ToString();
        ar.secondsRemaining = timeRemaining.Minutes.ToString() + ":" + timeRemaining.Seconds.ToString();
     }
     else
     {
        ar.success = false;
        ar.message = "User not authenticated";
     }

     string output = js.Serialize(ar);
     Response.Write(js.Serialize(ar));

  }

我用ajax每秒调用从母版页此页面中我的申请。 过去在认证到期的中间点,过期被重置。

如何防止这种行为? 有什么我可以在可能的请求的头呢?

Answer 1:

你为什么不保存期满为你计算自己的会话变量? 你只需要得到id.Ticket.Expiration值一次。 然后每次调用,从服务器获取的价值,并相应地增加它,并将其存储回服务器上。

http://msdn.microsoft.com/en-us/library/ms178581%28v=vs.85%29.aspx

伪代码:

if(!Session.KeyExists("Expiration"))
{
  Session["Expiration"] = id.Ticket.Expiration;
}

Session["TimeRemaining"] = Session["Expiration"] - DateTime.Now;

// get all ajaxy here


Answer 2:

把你的CheckExpiration.aspx页面在自己的应用程序和部署此作为主应用程序之下的虚拟目录。 在该虚拟目录,配置slidingExpiration =假。 您的代码将工作,只是当它低于获得一半的时间,直到过期不会重新票。

下面是我在一个快速的本地项目做以验证它的工作原理:

  1. 创建一个新的Web应用程序AuthTest4,并将其配置在路径/ AuthTest4使用本地IIS服务器
  2. 走进IIS和改变/ AuthTest4取消选中所有的自动生成/隔离方案的机键设置和产生它自己的machineKey。
  3. 创建一个空的Web应用程序ExpCheck,把你的CheckExpiration.aspx代码它
  4. 配置ExpCheck Web应用程序使用本地IIS虚拟目录/ AuthTest4 / ExpCheck
  5. 改性ExpCheck应用程序的web.config以下仅示出了部分具有

ExpCheck web.config中。 所有其他安全设置将会从父虚拟目录向下级联。

<system.web>
  <authentication mode="Forms">
   <forms slidingExpiration="false" />
  </authentication>
</system.web>


文章来源: Check authentication ticket expiration without affecting it