JWT
一、JWT
JWT:( JSON Web Token ) JWT 结构化令牌 https://jwt.io/
JWT 这种结构化体可以分为 HEADER(头部)、PAYLOAD(数据体)和 SIGNATURE(签名)三部分。
header.payload.signature
目前 OAuth 2.0 的令牌只支持一种类型,那就是 bearer 令牌
二、JWT授权为什么要在 Authorization标头里加个Bearer ?
Authorization : Bearer Token 为什么不写成 Authorization : Token。
这是因为 W3C 的 HTTP 1.0 规范,Authorization 的格式是:
Authorization: <type> <authorization-parameters>
Bearer 是授权的类型,常见的授权类型还有:
Basic 用于 http-basic 认证;
Bearer 常见于 OAuth 和 JWT 授权;
Digest MD5 哈希的 http-basic 认证 (已弃用)
AWS4-HMAC-SHA256 AWS 授权
三、JWT好处
每次提到无状态的 JWT 时相信都会看到另一种基于 Session 的用户认证方案介绍,这里也不例外,Session 的认证流程通常会像这样。
这种方案有一些缺点:
- 需要从内存或数据库里存取 session 数据
- 扩展性差,对于分布式应用,需要实现 session 数据共享
JWT 正好可以解决这些问题。JWT 的魔法很简单,将需要使用到的用户数据等信息放入 JWT 里面,每次请求都会携带上,只要保证密钥不泄露,JWT 就无法伪造。
JWT包含用户信息,避免频繁调取数据库。