[英]asp.net MVC FormsAuthentication for claim based authentication
我们正在使用Gigya来验证用户身份,这将向我们提供用户ID和电子邮件。 然后,我们将用户详细信息传递给我们的CRM Web服务,该服务将从CRM返回用户数据。
然后,我们需要为用户创建一个会话,以便我们可以识别用户是否已登录。 如果未登录,则重定向到Gigya进行登录/注册等。
现在,鉴于我们没有使用任何ASP.NET成员资格或类似身份,我在考虑如何保护成员页面。 我能想到的一种方法是在会话中存储用户详细信息。 然后检查会话中是否存在用户详细信息,如果不存在,则提示登录。
我也在考虑是否:
我可以使用FormsAuthentication.SetAuthCookie
或类似的东西来创建一个asp.net会话
还是有更好的方法来实现这一目标。
另外,如果我使用FormsAuthentication.Logout
,即使我没有使用asp.net成员资格提供程序,它也会清除所有会话和cookie吗?
目标:
首先,从安全角度来看,这非常非常重要。
身份验证!=会话。
它们是不同的概念。 第二,
切勿使用会话进行身份验证
见第一条规则。 FormsAuthentication没有任何内容。 零。 小人物。 纳达。 与会话管理有关。 它与成员身份或凭据验证也没有任何关系。 它所做的只是存储一个cookie,ASP.NET可以解码该cookie以验证用户是否已通过身份验证。 该cookie是在您的应用程序验证用户凭据后设置的。
FormsAuthentication.Logout()
不会清除会话,因为正如我已经说过的,它们之间没有任何关系。 您必须通过调用Session.Abandon()
来清除会话。
会话与为用户存储数据有关,并不安全。 会话是易失的,IIS可以在任何时候以任何理由随时丢弃它。 从请求到下一个会话,您不能依赖Session。
身份验证是加密的,并且严格地证明用户已通过身份验证。
身份验证可以超越会话。 它可能会持续数小时,数周,数月...会话仅对您当前所在的时间有用(如果IIS不会更早杀死它)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.