会话与基于令牌的身份验证
基于会话和令牌的身份验证方法用于使服务器信任经过身份验证的用户通过 Internet 发送的任何请求。通过这种方式,用户可以与他们的帐户进行交互,而无需不断地指定他们的凭据。这些方法通常用于不同的目的。
例如,会话通常用于网站应用程序,而令牌则首选用于服务器到服务器的连接。
会话认证
会话是一个小文件,很可能是 JSON 格式,用于存储有关用户的信息,例如唯一 ID、登录时间和到期时间等。它生成并存储在服务器上,以便服务器可以跟踪用户请求。用户会收到其中一些详细信息,尤其是 ID,作为将随每个新请求一起发送的 cookie,以便服务器可以识别 ID 并授权用户的请求。
在职的
- 用户向服务器发送登录请求。
- 服务器对登录请求进行身份验证,向数据库发送会话,并向用户返回包含会话 ID 的 cookie。
- 服务器在数据库中检查在 cookie 中找到的 ID,如果找到该 ID,它会将请求的页面发送给用户。
- 现在,用户发送新请求(带有 cookie)。
优点缺点
由于会话存储在服务器上,因此其管理员可以控制它们。例如,如果安全团队怀疑某个帐户被盗用,他们可以立即使会话 ID 无效,从而使用户立即注销。另一方面,由于会话存储在服务器上,服务器负责查找用户发送的会话ID。这可能会导致可伸缩性问题。
Cookie 可能会受到跨站请求伪造攻击。攻击者可能会将用户误导到恶意网站,其中一些 JS 脚本可能会利用 cookie 向服务器发送恶意请求。另一个漏洞与中间人攻击的可能性有关,攻击者可以拦截会话 ID 并对服务器执行有害请求。
基于令牌的身份验证
令牌是不可篡改的授权文件。它由服务器使用密钥生成,发送给用户并由用户存储在其本地存储中。与 cookie 的情况一样,用户在每次新请求时都会将此令牌发送到服务器,以便服务器可以验证其签名并授权请求。
在职的
- 用户向服务器发送登录请求。
- 服务器授权登录并向用户发送令牌。
- 服务器检查令牌是否有效,如果令牌有效,它将请求的页面发送给用户。
- 现在,用户发送一个新请求(带有令牌)。
注意-那些不是身份验证文件,它们是授权文件。在接收令牌时,服务器不会查找用户是谁,它只是根据令牌的有效性对用户的请求进行授权。
优点缺点
当用户想要减少他们必须发送凭证的次数时,令牌会很有用。在服务器到服务器连接的情况下,使用凭证变得困难,而令牌克服了这个问题。此外,使用令牌的服务器可以提高它们的性能,因为它们不需要不断地查看所有会话细节来授权用户的请求。
但是,身份验证详细信息存储在客户端上,因此服务器无法像会话方法中那样执行某些安全操作。如上所述,服务器不对用户进行身份验证,因此将令牌链接到其用户可能会更加困难。如果假设的攻击者设法获得一个有效的令牌,他们就可以无限制地访问服务器数据库。如果服务器使用旧算法生成密钥,则这些密钥可能会被破坏。
会话和基于令牌的身份验证方法之间的差异
Criteria | Session authentication method | Token-based authentication method | |
---|---|---|---|
1. | Which side of the connection stores the authentication details | Server | User |
2. | What the user sends to the server to have their requests authorized | A cookie | The token itself |
3. | What the server does to authorize users’ requests | Looking up in its databases to find the right session thanks to the ID the user sends with a cookie | Decrypting the user’s token and verifying its signature |
4. | Can the server admins perform securities operations like logging users out, changing their details, etc | Yes, because the session is stored on the server | No, because the token is stored on the user’s machine |
5. | From what kind of attacks the method may suffer | Man-in-the-middle, Cross-site request forgery | Man-in-the-middle, Token steal, breaches of the secret key |
6. | Preferred method application | User-to-server connections | Server-to-server connections |
结论
- 会话和基于令牌是两种身份验证方法,它们允许服务器信任它从用户接收到的所有请求。主要区别在于基于会话的连接身份验证存储身份验证详细信息。 session 方法使服务器存储大部分细节,而在基于令牌的情况下,客户端存储它们。
- 会话身份验证方法基于通过 cookie 文件与客户端共享 ID 的概念,而其余详细信息在会话文件上,存储在服务器上。
- 基于令牌的身份验证方法基于这样的概念,即拥有令牌是用户唯一需要让服务器授权其请求的东西,服务器必须只验证签名。令牌可以安全使用,因为它不能被篡改。
- 这两种方法都有固有的漏洞,可以通过不同的解决方法最容易地解决。最后,开发人员必须决定哪种方法更适合他们的需求和应用程序。