繁体   English   中英

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

[英]ASP.NET Forms Authentication Cookie and Sessions for additional data

应用程序背景安全性:所有应用程序都托管在专用Extranet(和/或本地Intranet-取决于安装实例)上。 因此,尽管安全很重要,但它并不像Intranet上的应用程序那么重要。 但是要说,重要的是不能轻易地对系统进行黑客攻击或劫持。

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

  • 类库(dll)
  • 身份验证前端ASP.NET应用程序

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

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

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

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

问题

现在,这一切都很好,并且最初所有数据都存储在身份验证cookie中,位于cookie的userdata部分中,但这是问题所在。

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

因此,我尝试将其放入Session变量中,最初是将单个变量与所有通过解密发送的数据一起放入称为“ userdata”的单个Session变量中。 然后我检查何时发出请求。

然而...

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

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

我的假设正确吗? 有没有办法以编程方式同步会话和AuthCookie?

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

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

如果我正确阅读此书,最有可能要做的是检查Session_Start中cookie是否存在,并刷新会话数据,以便将其重新加载到会话中。 会话并不是世界上最稳定的事情,甚至会话超时也不总是您认为的那样

如果您还没有,请向您的项目添加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.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM