我一直在试图理解会话和令牌认证之间的真正差异。会话认证是否比基于令牌的认证更安全?
我迄今收集:
在令牌认证,没有任何东西存储在服务器端。这意味着,实际的令牌包括密码和用户名以及其他可能的信息。服务器只是解密令牌,然后检查用户名和密码是否正确。我是对的吗?如果令牌包含密码和用户名,那么每次令牌如何仍然不同?
在基于会话的身份验证中,会话令牌只是一个随机(唯一的时间)ID,映射到服务器端的用户。因此,当服务器接收到session_id(例如,在cookie中)时,它将检查它是否映射到任何用户,如果它确实,则用户被认证。所以session_id不包含任何用户相关的信息,可以解密?
在会话认证中,服务器将发送没有加密的用户相关信息(不是密码)(除非使用https)。
在令牌认证中,服务器不会发回直接用户信息,而只是包含用户信息的令牌,一旦解密?
我有一种感觉,我并没有真正理解令牌和会话身份验证是如何工作的。上面的陈述中肯定有错误。
但是,让我们一起玩吧,这些陈述是正确的。那么会不会基于会话的认证更安全?因为在基于会话的认证中,你不会泄露用户密码(例如在浏览器中)。由于它只是一个随机ID,所以无法从中获取信息。但是,令牌认证并非如此。由于令牌认证包含密码,如果有人设法解密密码,他会得到您的密码。因此,会话身份验证实际上不比身份验证更安全,因为它不会显示密码和用户名信息?
“令牌由服务器(非客户端)发出,要求用户出示其凭据并使用服务器私钥进行数字签名”。是否使用相应的公钥验证签名?所以如果有人拥有私钥,如果他使用该私钥生成了令牌,他可以被认证? –
如果服务器用户使用不对称密钥对(RSA),则客户端可以使用公钥来验证签名。通过简单密钥(HMAC),只有服务器可以执行验证。私钥必须保密,因为它允许生成新的有效令牌 – pedrofb