asp.net MVC FormsAuthentication用于基于声明的身份验证

时间:2015-03-21 10:30:04

标签: asp.net asp.net-mvc session asp.net-membership membership-provider

我们正在使用Gigya对用户进行身份验证,该用户将向我们提供用户ID和电子邮件。然后我们将用户详细信息传递给我们的CRM Web服务,该服务将从CRM返回用户数据。

然后,我们需要为用户创建一个会话,以便我们可以识别用户是否已登录。如果没有登录,则重定向到Gigya进行登录/注册等。

现在,鉴于我们没有使用任何ASP.NET成员资格或类似内容,我正在考虑如何保护成员页面。我能想到的一种方法是将用户细节存储在会话中。然后检查会话中是否存在用户详细信息,如果不存在则提示登录。

我也在考虑是否:

  1. 我可以使用FormsAuthentication.SetAuthCookie或类似方法创建一个asp.net会话

  2. 或者有更好的方法来实现这一目标。

  3. 另外,如果我使用FormsAuthentication.Logout它会清除我的所有会话和cookie,即使我没有使用asp.net会员提供商吗?

    目标:

    1. 能够为用户创建会话
    2. 能够根据我们从CRM获得的用户角色授权用户。
    3. 能够在Lout按钮上注销用户。

1 个答案:

答案 0 :(得分:1)

首先,从安全角度来看,这非常非常重要。

  

身份验证!=会话。

它们是不同的概念。第二,

  

永远不要使用会话进行身份验证

参见第一条规则。 FormsAuthentication什么都没有。零。小人物。纳达。与会话管理有关。它也与会员资格或凭证验证无关。它所做的只是存储一个ASP.NET可以解码的cookie,以验证用户是否经过身份验证。此cookie在您的应用程序验证了用户凭据后设置。

FormsAuthentication.Logout()不会清除会话,因为正如我已经说过的那样,它们彼此无关。您必须通过致电Session.Abandon()来清除会话。

会话是关于为用户存储数据,并且不安全。会话是不稳定的,IIS可以随时随地丢弃它。从请求到下一个请求,您不能依赖Session。

身份验证已加密,严格来说证明用户已经过身份验证。

身份验证可以超越会话。它可能好几个小时,几个星期,几个月......你的会话只对你目前的时间有好处(如果IIS之前没有杀死它)。