繁体   English   中英

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

[英]asp.net MVC FormsAuthentication for claim based authentication

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

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

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

我也在考虑是否:

  1. 我可以使用FormsAuthentication.SetAuthCookie或类似的东西来创建一个asp.net会话

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

另外,如果我使用FormsAuthentication.Logout ,即使我没有使用asp.net成员资格提供程序,它也会清除所有会话和cookie吗?

目标:

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

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

身份验证!=会话。

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

切勿使用会话进行身份验证

见第一条规则。 FormsAuthentication没有任何内容。 零。 小人物。 纳达。 与会话管理有关。 它与成员身份或凭据验证也没有任何关系。 它所做的只是存储一个cookie,ASP.NET可以解码该cookie以验证用户是否已通过身份验证。 该cookie是在您的应用程序验证用户凭据后设置的。

FormsAuthentication.Logout()不会清除会话,因为正如我已经说过的,它们之间没有任何关系。 您必须通过调用Session.Abandon()来清除会话。

会话与为用户存储数据有关,并不安全。 会话是易失的,IIS可以在任何时候以任何理由随时丢弃它。 从请求到下一个会话,您不能依赖Session。

身份验证是加密的,并且严格地证明用户已通过身份验证。

身份验证可以超越会话。 它可能会持续数小时,数周,数月...会话仅对您当前所在的时间有用(如果IIS不会更早杀死它)。

暂无
暂无

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

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