Web 认证机制相关概念解析

在 Web 开发中,我们经常会遇到各种各样的认证机制的概念和名词,如 Cookies、Session、Token、SSO(Single Sign-On)和 OAuth 2.0 等,下面详细解释一下它们之间的联系与异同

Cookies

Cookies 是一种用于服务器与浏览器交换数据的方式。当服务器响应时,它会通过 Set-Cookie 的 HTTP header 写入浏览器。然后,浏览器在每次请求时会自动在 header 中带上 cookies。当我们设置 cookie 时,可以设置过期时间、域名、路径、HttpOnly 等条件,只有满足这些条件的请求才会带上该 cookie。

例如,当用户登录一个网站后,服务器可以设置一个包含用户 ID 的 cookie,然后浏览器在后续的每次请求中都会带上这个 cookie,服务器就可以通过这个 cookie 来识别用户。

Session

由于 HTTP 请求是无状态的,如果我们需要在多次请求中保持用户状态,就需要额外的数据。这个数据可以是一个随机的字符串(Session ID),这样带有同样 Session ID 的请求就可以被关联为同一个会话。Session ID 的交互可以用 set cookie 的方式实现。

例如,当用户登录一个网站后,服务器可以生成一个 Session ID 并通过 cookie 发送给浏览器,然后浏览器在后续的每次请求中都会带上这个 Session ID,服务器就可以通过这个 Session ID 来识别用户。

Token

Token 是客户端发送请求时携带的凭证,用于表明自己的身份(Authentication)。常见的 tokens 有两种:

  • 随机字符串:通过服务端生成随机字符串(Session ID),然后通过 Set-Cookie 写入客户端的浏览器作为 token 的形式,每次请求会在 header 中的 cookie 带上该 token/session id。
  • JWT:一种按照 JWT 通用协议签名过的信息,base64 解码后为 JSON 格式。

例如,当用户登录一个网站后,服务器可以生成一个 JWT token,并将其发送给浏览器。然后浏览器在后续的每次请求中都会带上这个 JWT token,服务器就可以通过这个 JWT token 来识别用户。

SSO (Single Sign-On)

SSO 是一种一次登录后通过 token 访问多个业务的机制。用户只需要在一个系统中登录一次,就可以在其他多个系统中自由访问,无需再次登录,大大提高了用户体验。

例如,Google 的各种服务(如 Gmail、Google Drive、Google Photos 等)就使用了 SSO。用户只需要登录一次 Google 账号,就可以访问 Google 的所有服务。

OAuth 2.0

OAuth 2.0 是一种授权机制。当用户在访问 A 应用时需要使用 B 应用的数据,用户可以通过获取 B 应用的授权 token,然后授权给 A 应用使用该 token 获取 B 应用的数据。

例如,用户在使用一个日历应用时,可能需要访问他在 Google 日历上的数据。这时,用户可以通过 OAuth 2.0 获取 Google 日历的授权 token,然后将这个 token 授权给日历应用,日历应用就可以使用这个 token 来获取 Google 日历的数据。

以上就是关于 Cookies、Session、Token、SSO 和 OAuth 2.0 的详细介绍。希望通过这篇文章,能帮助大家更好地理解和使用这些 Web 认证机制。

概念辨析

Cookies vs Session

Cookies 和 Session 都是用于在无状态的 HTTP 请求中保存状态信息的机制。但它们的工作方式有所不同。

Cookies 是存储在客户端(浏览器)的小段数据,服务器可以通过 Set-Cookie HTTP header 将数据写入 Cookies。而 Session 是存储在服务器端的数据,它通过在 Cookies 中保存一个 Session ID 来关联客户端和服务器端的数据。

因此,Cookies 的主要问题是容量有限(每个域名下最多只能存储 20 个 Cookies,每个 Cookie 大小不能超过 4KB),而 Session 的主要问题是如果用户数量过多,会占用大量服务器资源。

Token vs Cookies/Session

Token 和 Cookies/Session 都是用于认证用户身份的机制。但它们的工作方式有所不同。

Cookies/Session 是通过在服务器端保存用户状态信息来实现认证的,而 Token(如 JWT)则是无状态的,它将用户状态信息加密后直接存储在 Token 中,服务器不需要保存任何用户状态信息。

因此,Token 的主要优点是可以跨域(Cookies 在跨域场景下有很多限制),并且服务器不需要保存状态信息,可以轻松实现水平扩展。

SSO vs Cookies/Session/Token

SSO(Single Sign-On)是一种允许用户在多个应用之间共享认证状态的机制,它通常基于 Cookies/Session 或 Token 实现。

与 Cookies/Session/Token 只能在单个应用中保存用户状态不同,SSO 允许用户在多个应用之间共享认证状态,用户只需要登录一次,就可以访问所有连接的应用。

OAuth 2.0 vs Cookies/Session/Token

OAuth 2.0 是一种授权机制,它允许用户将他们在一个应用中的权限(如访问数据的权限)授权给另一个应用。

与 Cookies/Session/Token 只能用于认证用户身份不同,OAuth 2.0 可以用于授权,它允许用户将他们在一个应用中的权限授权给另一个应用。

以上就是关于 Cookies、Session、Token、SSO 和 OAuth 2.0 的对比与差异。希望通过这篇文章,能帮助大家更好地理解和使用这些 Web 认证机制。