【问题标题】:authentication sessionid vs cookie身份验证 sessionid 与 cookie
【发布时间】:2011-09-21 04:48:57
【问题描述】:

我试图弄清楚使用基于 sessionid 的身份验证与基于 cookie 的身份验证的优缺点

据我所知,基于 cookie 的身份验证

  • 用户提交登录请求并发送其凭据
  • 根据数据库检查凭据
  • Cookie 将与用户详细信息一起设置
  • 这将通过 https 完成,并且 cookie 将被加密。
  • 在 .net 中,如果这是 authcookie 用户身份将被设置
  • db 只被命中一次,随后的调用只检查 auth cookie

如果是基于会话的身份验证

  • 用户提交登录请求并发送其凭据
  • 根据数据库检查凭据
  • 会生成一个会话 ID,并将其存储在一个数据库中
  • Cookie 将使用用户详细信息和生成的会话 ID 进行设置
  • 后续调用会将会话 ID 与数据库中的 ID 进行比较
  • db 每次都被命中

问题

有什么理由更喜欢其中一个吗?基于 cookie 的安全性是否较低(即使您对其进行加密和签名)?由于会话在每次调用期间都会访问数据库,因此基于会话的性能是否更差?我已经看到几个网站倾向于一种或另一种方式,但无法清楚地了解使用哪种方法。任何讨论/建议将不胜感激。

【问题讨论】:

    标签: session authentication language-agnostic forms-authentication


    【解决方案1】:

    我很难消化这个问题。据我所知,基于表单的身份验证有两种形式:cookie 和无cookie。首选基于 Cookie 的身份验证。

    在基于 cookie 的版本中,用户获得一个 cookie,其值为加密的 Forms Authentication Ticket。 cookie 在服务器上被加密。除非加密密钥从 machine.config 共享或在 Web.config 中被覆盖,否则 cookie 只能由发布它的服务器解密。我相信加密是AES,非常安全。

    在 cookieless 方法中,cookie 的有效负载使用 HTTPModule 放在 url 中。此方法仅在设备不支持 cookie 时使用(很少见)。无 cookie 的方法不是首选 - 它使 AJAX 更加困难。

    见:

    http://msdn.microsoft.com/en-us/library/1d3t3c61.aspx

    http://support.microsoft.com/kb/910443

    【讨论】:

    • 对延迟回复表示歉意。我目前正在审核一些代码(Java),这些代码在用户登录时实际创建会话密钥,将其存储为 cookie,并且每次调用受保护的服务时,获取会话密钥并检查数据库以查看会话是否处于活动状态。这似乎是与我们不每次都访问数据库的 asp forms auth 不同的设计。使用会话和检查数据库的方法似乎效率低下。我这样想对吗?
    • 我的意见:对每个请求进行会话检查来打击数据库并不是什么大问题。会话表本身需要仔细的索引和优化以避免瓶颈。
    • 谢谢。只是为了确定 - 我认为上述方法不一定比表单身份验证方法更安全吗?
    • 如果会话密钥在服务器上加密并作为 cookie 发送回客户端,那么我看不出有问题。如果会话密钥未加密,我会遇到问题。用户可以开始欺骗密钥并尝试冒充另一个用户。如果使用 SSL,您不必担心 cookie 被盗,而是担心经过身份验证的用户可能会尝试冒充或窃取其他用户的会话。底线:用户不应该能够读取他们的身份验证票证/密钥。
    • 谢谢。会话密钥在服务器上加密,并且正在使用 SSL。
    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多