JWT
JWT是一种无状态的鉴权机制。将用户登录后的一些信息(比如用户Id)和存储时间等信息存储在一个加密过的字符串中,当服务器收到请求的时候,进行解密并直接使用信息
JWT的组成:使用base64编码描述jwt的头部、使用base64编码的payload,以及加密签名
JWT的组成
一个JWT实际上就是一个字符串,它由三部分组成,头部(base64).载荷(base64).签名(HS256(头部(base64).载荷(base64)))。比如jwt token串:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC8xMjcuMC4wLjE6ODAwMFwvYXBpXC9sb2dpbiIsImlhdCI6MTU2MzkzMjgwMywiZXhwIjoxNTYzOTM2NDAzLCJuYmYiOjE1NjM5MzI4MDMsImp0aSI6ImxFVGJLZ1hCblFoMkk0dkUiLCJzdWIiOjU1LCJwcnYiOiI4N2UwYWYxZWY5ZmQxNTgxMmZkZWM5NzE1M2ExNGUwYjA0NzU0NmFhIn0.qIToKn3BgSb9-pg7YT8aUpPTnHPPynxkNMxsYsioZrQ
-
头部(header)
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 (base64编码)
{“typ”:“JWT”,“alg”:“HS256”} -
载荷(Payload)
eyJpc3MiOiJodHRwOlwvXC8xMjcuMC4wLjE6ODAwMFwvYXBpXC9sb2dpbiIsImlhdCI6MTU2MzkzMjgwMywiZXhwIjoxNTYzOTM2NDAzLCJuYmYiOjE1NjM5MzI4MDMsImp0aSI6ImxFVGJLZ1hCblFoMkk0dkUiLCJzdWIiOjU1LCJwcnYiOiI4N2UwYWYxZWY5ZmQxNTgxMmZkZWM5NzE1M2ExNGUwYjA0NzU0NmFhIn0 (base64编码)
{“iss”:“http://127.0.0.1:8000/api/login",“iat”:1563932803,“exp”:1563936403,“nbf”:1563932803,“jti”:“lETbKgXBnQh2I4vE”,“sub”:55,“prv”:"87e0af1ef9fd15812fdec97153a14e0b047546aa”}
exp:存储时时间以便后续验证token是否过期
sub:数据库中user_id -
签名(Signature)
HS256算法加密,加密时我们还需要提供一个密钥(secret)
qIToKn3BgSb9-pg7YT8aUpPTnHPPynxkNMxsYsioZrQ
参考
[1]: https://bbs.huaweicloud.com/blogs/06607ea7b53211e7b8317ca23e93a891
[2]: https://learnku.com/laravel/t/27760