【问题标题】:asp.net MVC FormsAuthentication for claim based authenticationasp.net MVC FormsAuthentication 用于基于声明的身份验证
【发布时间】:2015-03-21 10:30:04
【问题描述】:

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

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

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

我也在考虑是否:

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

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

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

目标:

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

【问题讨论】:

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


    【解决方案1】:

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

    身份验证!= 会话。

    它们是不同的概念。二、

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

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

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

    会话是为用户存储数据,并不安全。会话是易变的,IIS 可以随时出于任何原因随时丢弃它。你不能依赖 Session 从请求到下一个。

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

    身份验证可以超越会话。它可以持续数小时、数周、数月……您的会话仅适用于您当前所在的时间(如果 IIS 没有更早地杀死它)。

    【讨论】:

    • 鉴于我们的用户已经使用 Gigya 进行了身份验证,您是说我们不需要使用任何 FormAuthentcation 功能吗?如果会话不是跟踪登录用户的正确方法,那么还有什么替代方法?
    • @Myagdi - 我对 Gigya 一无所知,所以我不知道他们是否提供了一些这样做的机制。但我建议你重新阅读我写的内容。
    猜你喜欢
    • 2015-01-30
    • 1970-01-01
    • 2013-07-20
    • 2016-03-07
    • 2012-03-26
    • 2014-02-28
    • 2019-01-01
    • 2012-12-12
    • 2017-09-30
    相关资源
    最近更新 更多