ASP.NET Forms身份验证Cookie和会话以获取其他数据

时间:2011-10-01 08:56:28

标签: asp.net forms-authentication httpsession

申请背景 安全: 应用程序都托管在私有外部网(和/或本地Intranet上 - 取决于安装实例)。因此,虽然安全性很重要,但它并不像内部网上的应用程序那么重要。但是,说系统不容易被黑客攻击或劫持是很重要的。

应用: 该应用程序分为两部分: -

  • 班级图书馆(dll)
  • 身份验证前端ASP.NET应用程序

dll是前端身份验证应用程序的一部分,并将添加到需要用户进行身份验证的其他应用程序(“消费者应用程序”)中。

身份验证应用是所有用户的中央存储,他们有权访问的应用以及基于用户名的权限级别。

对于安装了dll的消费者应用程序,当最终用户点击要求他们登录的页面时,消费者应用程序会将其与appid,用户日志一起发送到身份验证应用程序login.aspx页面如果他们需要权限,那么auth应用程序会将它们发送回消费者应用程序(通过带有加密数据的表单) - 其中包括有关用户是谁,用户名,真实姓名,工作角色,组织等的基本数据...而且重要的是消费者应用程序的权限级别列表。

然后,消费者应用程序获取该数据,并对其进行处理,对其进行解密等。并创建表单身份验证cookie&填充用户类和用户角色类 - 这都是在dll本身内完成的。

问题

现在这一切都很好用,最初所有的数据都存储在身份验证cookie中,在cookie的userdata部分,但是问题就在这里....

一个消费者应用程序(我们已经在内部编写了一个中央应用程序,可以拥有与单个用户(主要是应用程序管理员)相关联的许多权限(用户角色),因此我们需要一些可以容纳许多内容的应用程序数据,超过身份验证cookie可容纳的4KB。

所以我试图把它放到Session变量中,最初是一个变量,将所有通过解密数据发送到一个名为“userdata”的会话变量中。然后我会检查何时提出请求。

...然而

我遇到的第一个问题是身份验证cookie的寿命似乎比Session更长,我想我已经通过将会话延长到35分钟(比AuthCookie长5分钟)来解决这个问题。 / p>

但是当消费者应用程序程序员对其代码进行更改(通过Visual Studio 2010在调试中运行localhost)并刷新浏览器时,AuthCookie仍然存在,但会话消失。现在我最初使用默认的InProc会话模式,我想这可能是问题。

我的假设是否正确?有没有一种方法可以以编程方式同步会话和AuthCookie?

有关解决此问题的其他建议吗?

1 个答案:

答案 0 :(得分:1)

每次您的应用程序刷新时(这可能发生在您可能更改代码时),但由于各种原因可能在服务器上发生,您的用户会话将被清除。

如果我正确地读到这一点,那么你最有可能想要做的是检查Session_Start中是否存在cookie,并刷新会话数据以便将其加载回会话。会议不是世界上最稳定的,甚至是Session Timeout isn't always what you think it is

如果您还没有,请将Global.asax添加到项目中。如果它是c#,编辑Global.asax.cs或VB,我认为它是Global.asax.vb。

protected void Session_Start(object sender, EventArgs e)
{
// Check for Cookie, if it exists here, then load data into the session here.
}