📜  了解登录屏幕背后的Web身份验证

📅  最后修改于: 2021-06-28 08:34:55             🧑  作者: Mango

认证是验证用户或信息身份的过程。用户身份验证是在用户登录到计算机系统时验证用户身份的过程。

本文简要介绍了现代Web应用程序中的身份验证。

身份验证的两种主要类型是:

  • 无状态验证

  • 状态验证

要了解它们之间的重大区别,请查看“无状态协议与有状态协议之间的区别”一文。可以通过了解两种身份验证的流程来理解这两种身份验证。

状态验证:使用会话ID和Cookies。

认证流程:

  1. 用户提交登录凭据,即用户名和密码。
  2. 服务器已针对数据库对此进行了验证。
  3. 然后,服务器生成一个临时用户会话。
  4. 服务器发出带有会话ID的cookie。
  5. 用户/客户端可以随每个请求发送cookie。
  6. 服务器根据会话存储对其进行验证并授予访问权限。
  7. 当用户注销时,服务器破坏会话并清除cookie。

注意:会话ID只是一个随机字符串,服务器可以根据会话的存储区识别该随机字符串以验证用户的请求。因此,没有第三方可以从该会话中提取任何数据/信息。

状态验证的特征:每个用户会话都存储在服务器端(状态)

  • 内存中,即文件系统(较少见)。
  • 缓存(Redis或Memcached)
  • 在数据库中(常用的包括Postgres和MongoDb)

每个用户由会话ID标识。

  1. 不透明参考:
    • 没有第三方可以提取任何数据。
    • 只有发行者(服务器)可以映射回数据。
  2. 存储在Cookie中:
    • 秘密签名。同样,cookie经常受标志保护,以使客户端无法篡改cookie。整个目的还包括对服务器端的cookie进行加密签名的过程,以避免/检测到客户端对cookie的任何篡改,因此服务器端可以确保cookie未被篡改。 。

无状态身份验证:使用令牌,JWT,OAuth和其他。

使用令牌的认证流程:

  • 用户提交登录凭证,即用户名和密码。
  • 服务器根据数据库验证凭据。
  • 然后,服务器生成一个临时令牌并将用户数据嵌入其中。
  • 服务器使用令牌(在主体或标头中)进行响应。
  • 用户将令牌存储在客户端存储中[localStorage或SessionStorage]。
  • 用户将令牌与每个请求一起发送。
  • 服务器验证令牌并授予访问权限。
  • 当用户注销时,令牌将从客户端存储中清除。

无状态身份验证系统的功能:

  • 令牌不存储在服务器端,而仅存储在客户端。(无状态)
  • 签名并带有防止篡改的秘密。
  • 已验证并且可以被服务器信任。
  • 令牌可以是不透明的或独立的。
  • 令牌可以在其有效负载中携带所有必需的用户数据。
  • 这样可以减少对数据库的查找,但会将数据暴露给XSS攻击。
  • 令牌通常在Authorization标头下发送。
  • 当令牌即将到期时,可以对其进行刷新,因为向客户端同时颁发了访问令牌和刷新令牌。
  • 刷新令牌可用于刷新访问令牌。
  • 用于SPA Web应用程序,Web API甚至移动应用程序。