8

我试图找出使用基于会话ID认证VS基于Cookie认证认证会话ID VS饼干

就的优点和缺点,我可以在基于Cookie认证见

  • 用户提交登录请求发送他们的凭据
  • 凭据针对数据库检查
  • cookie将与用户的细节设置
  • 这将通过https完成,cookies将被加密。
  • 在.NET中,如果这是authcookie用户身份将被设置
  • 的DB是打了一次,并且后续调用只检查身份验证cookie的

在基于会话的认证的情况下

  • 用户提交登录请求发送其凭据
  • 凭据检查数据库
  • 将生成会话ID并也存储在一个数据库
  • cookie将与用户的详细信息,并生成会话ID
  • 后续调用会比较反对一个会话ID在数据库
  • 该DB命中每次
设置

问题

是否有任何理由更喜欢一个比另一个?基于cookie的安全性是否较低(即使您对它们进行了加密和签名)?基于会话的性能是否因为在每次调用期间碰到数据库而变得更糟?我看到几个站点倾向于某种方式,但无法清楚地了解使用哪种方法。任何讨论/建议将不胜感激。

回答

7

我很难消化这个问题。据我所知,基于表单的身份验证有两种口味:Cookie和Cookieless。基于Cookie的身份验证是首选。

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

在无cookie的方法中,cookie的有效载荷使用HTTPModule放入网址中。这种方法仅在设备不支持cookies(罕见)时才使用。无cookie的方法不是首选 - 它使AJAX更加困难。

参见:

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

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

+0

道歉延迟答复。目前,我正在审核一些实际上在用户登录时创建会话密钥的代码(Java),并将其作为cookie存储,并且每次调用受保护的服务时,都会获取会话密钥并检查数据库以查看会话是否处于活动状态。这似乎是一个不同于asp窗体auth的设计,我们每次都不打db。会话和检查数据库的方法似乎效率低下。我是这么想的吗? – user275157

+3

我的意见:通过会话检查来查询每个请求并不是什么大问题。会话表本身将需要仔细索引和优化以避免瓶颈。 – Brett

+0

谢谢。而且可以肯定 - 我认为上述方法不一定比表单认证方法更安全吗? – user275157