浏览器本身是无状态的请求。所以如何验证用户的权限呢? 传统的验证方式是将之保存在数据库中,这就问题很多,xss漏洞导致用户的token的用户泄露,用户信息就不再安全。及时加入了验证过期, 但是还有有一段时间还是会导致这个问题, 只是时间短一些,而且如果用户量过大,会加深服务器的存储压力和开销。所以用JWT 会避免这个问题。当然JWT 会对SEO 不友好。
JWT(JSON Web Token)分为三部分:Header、Payload、Signature。
1、Header
header所表示的JSON对象通常由2个部分组成:token的类型,即”JWT”; token所采用的hash算法,例如HMAC SHA256或者RSA。
{
'typ': 'JWT',
'alg': 'HS256'
}
2、Payload
payload为JWT的第二部分,其JSON对象包含一系列键值对(key/value)。其中,有些预定义键有特殊含义,比如iat、exp等,iat表示JWT生成的实际,而exp代表JWT过期的时间。开发者可以使用其他非预定义的键用于传输数据。
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
3、Signature
signatrue,即签名,是JWT的第三部分。它由编码的header和payload,使用用户指定的密钥secret,采用header中指定的哈希算法生成。 所以秘钥很关键,它是不被外界所知道的。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
通过JWT 这三种方式保证了通用性,他适合向web应用传递一些非敏感信息。