【Web】JWT(JSON Web Token)验证是什么?和SWT,SMAL的区别

JWT是什么?

JWT(JSON Web Token)是一种轻量级的安全传输方式,可以用于在不同的系统之间传递安全可靠的信息,例如用户身份验证、授权和信息交换等。JWT采用JSON格式对信息进行编码和传输,用于在各方之间以 JSON 对象的形式安全地传输信息。此信息可以验证和信任,因为它是经过数字签名的。JWT 可以使用密钥(使用 HMAC 算法)或使用 RSA 的公钥/私钥对进行签名

JWT的结构

JSON Web Token由三部分组成,它们之间用圆点(.)连接。这三部分分别是:头部(Header)、载荷(Payload)和签名(Signature)

头部

头部包含了JWT的类型和使用的算法,例如:

{
    
    
  "alg": "HS256",
  "typ": "JWT"
}

载荷

载荷包含了JSON格式的信息,例如:

{
    
    
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

签名

签名是对头部和载荷进行数字签名或加密生成的,例如:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

三部分加密后组合

头部和载荷使用Base64编码,签名使用指定算法和密钥生成,生成形如这样的密钥

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTQ0ODc1OTIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

基于Token的身份认证 与 基于服务器的身份认证

身份认证

  1. 客户端发送POST请求

  2. 在服务器端生成一个JWT,包括头部、载荷和签名,其中头部和载荷使用Base64编码,签名使用指定算法和密钥生成。

  3. 将生成的JWT返回给客户端。

  4. 客户端在后续的请求中将JWT添加到HTTP请求头中的Authorization字段中

  5. 服务端检查JWT签名,从JWT获得用户名

  6. 服务端发送响应给客户端

JWT,SWT,安全断言标记语言令牌(SAML)的区别

1. json编码后短

由于JSON 不如 XML 那么冗长,因此在编码时其大小也更小;使 JWT 比 SAML 更紧凑。这使得 JWT 成为在 HTML 和 HTTP 环境中传递的不错选择。

2. 安全性高

安全方面,SWT 只能由使用 HMAC 算法的共享密钥进行对称签名。而 JWT 和 SAML 令牌也可以使用 X.509 证书形式的公钥/私钥对来签名。但是,与对 JSON 进行签名的简单性相比,使用 XML 数字签名对 XML 进行签名而不引入模糊的安全漏洞是非常困难的。

3. 映射方便

JSON 解析器在大多数编程语言中很常见,因为它们直接映射到对象,相反,XML 没有自然的文档到对象的映射。这使得使用 JWT 比使用 SAML 断言更容易。

猜你喜欢

转载自blog.csdn.net/csxylrf/article/details/130917986