我们正在使用Gigya对用户进行身份验证,该用户将向我们提供用户ID和电子邮件。然后我们将用户详细信息传递给我们的CRM Web服务,该服务将从CRM返回用户数据。
然后,我们需要为用户创建一个会话,以便我们可以识别用户是否已登录。如果没有登录,则重定向到Gigya进行登录/注册等。
现在,鉴于我们没有使用任何ASP.NET成员资格或类似内容,我正在考虑如何保护成员页面。我能想到的一种方法是将用户细节存储在会话中。然后检查会话中是否存在用户详细信息,如果不存在则提示登录。
我也在考虑是否:
我可以使用FormsAuthentication.SetAuthCookie
或类似方法创建一个asp.net会话
或者有更好的方法来实现这一目标。
另外,如果我使用FormsAuthentication.Logout
它会清除我的所有会话和cookie,即使我没有使用asp.net会员提供商吗?
目标:
答案 0 :(得分:1)
首先,从安全角度来看,这非常非常重要。
身份验证!=会话。
它们是不同的概念。第二,
永远不要使用会话进行身份验证
参见第一条规则。 FormsAuthentication什么都没有。零。小人物。纳达。与会话管理有关。它也与会员资格或凭证验证无关。它所做的只是存储一个ASP.NET可以解码的cookie,以验证用户是否经过身份验证。此cookie在您的应用程序验证了用户凭据后设置。
FormsAuthentication.Logout()
不会清除会话,因为正如我已经说过的那样,它们彼此无关。您必须通过致电Session.Abandon()
来清除会话。
会话是关于为用户存储数据,并且不安全。会话是不稳定的,IIS可以随时随地丢弃它。从请求到下一个请求,您不能依赖Session。
身份验证已加密,严格来说证明用户已经过身份验证。
身份验证可以超越会话。它可能好几个小时,几个星期,几个月......你的会话只对你目前的时间有好处(如果IIS之前没有杀死它)。