JSON Web Token (JWT) 是一种开放标准,用于在各方之间以 JSON 对象的形式安全传输信息。它常用于验证用户身份,并在客户端和服务器之间安全传输信息。
当用户登录时,服务器创建一个 JWT,它由三部分组成:头部、载荷和签名。
头部通常由令牌类型和用于加密的算法组成。然后对头部进行 Base64Url 编码。
载荷包含声明,即关于用户和其他数据的陈述。声明可以包括用户的 ID、用户名、角色以及任何其他相关数据。载荷也经过 Base64Url 编码。
签名是通过使用头部中指定的算法对头部、载荷和一个密钥进行编码而创建的。这确保了令牌的完整性,并允许服务器验证其真实性。签名附加到编码后的头部和载荷上,形成完整的 JWT。
一旦 JWT 创建完成,它会被发送到客户端,客户端存储它并与后续请求一起发送。客户端通常在 HTTP 请求的 Authorization
头中以 Bearer token 的形式包含 JWT。
收到 JWT 后,服务器使用密钥验证其签名。如果签名有效,服务器可以解码头部和载荷中的信息以执行用户认证。服务器可以信任 JWT 中的信息,而无需查询数据库或执行任何额外的认证检查。这使得 JWT 成为一种高效和可扩展的认证机制。
令牌认证是一种通过使用访问令牌而不是使用用户名和密码来访问资源的认证方法。令牌通常由认证服务器颁发,并随每个请求一起作为认证证明传递。基于令牌的认证相比于传统的用户名和密码认证具有以下几个优点:
OAuth 2.0 是一个开放标准和授权框架,使第三方应用程序能够获得对用户资源的有限访问。它通常用于允许用户授权外部应用程序访问其在第三方平台上的数据。OAuth 2.0 依赖 JSON Web Token (JWT) 来进行认证和授权。
OAuth 2.0 涉及多个参与方,如资源拥有者(拥有资源的用户)、客户端(第三方应用程序)、授权服务器(负责颁发访问令牌)和资源服务器(持有受保护资源)。
在 OAuth 2.0 流程中,客户端从资源拥有者处获取授权许可。客户端然后将此许可与授权服务器交换以获取访问令牌。访问令牌是一个 JWT,包含了访问资源服务器上受保护资源所需的信息。然后由客户端使用该令牌来访问用户的资源。
通过使用 OAuth 2.0 和 JWT,应用程序可以在广泛的平台上提供安全和受控的用户数据访问。