据我了解,在使用 ServiceStack 的身份验证时,您通常会在会话开始时进行身份验证,然后将服务器端的会话标记为已通过身份验证。随后的 Web 服务请求将使用该会话 ID,并且不需要重新验证。(到目前为止,如果我错了,请纠正我)。
新会话 id 的生成是使用SessionExtensions.cs中的 Guid.NewGuid() 执行的,它不会生成加密的奇妙值。是否有任何理由不切换到使用加密安全值,例如使用RNGCryptoServiceProvider?
更新:
实际上,在进一步考虑之后,ASP.NET 并没有使用它的 Session Id 来确认请求者是经过身份验证的。它使用一个 FormsAuthenticationTicket,它已经用机器密钥加密并散列(这里是 ASP.NET 2.0 过程的一个很好的描述)。
我不是安全专家,所以如果您要比较 ASP.NET Forms Auth 提供的安全级别和随机值提供的安全级别,我不知道这意味着什么。我想这一切都归结为密钥和数据长度......但对表单身份验证进行暴力攻击所需的时间可能要高得多,因为它不需要只尝试一大堆随机数?