如何使用jwt鉴权
所谓JWT,全名是Json Web Token,是一个非常轻巧的规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。
jwt由三部分组成,分别是header
,payload
,signaure
。所以一个jwt通常显示是如下这样的
xxxxx.yyyyy.zzzzz
header部分
有两部分信息
- 声明类型,这里是
jwt
- 声明加密的算法 通常直接使用
HMAC SHA256
{
"alg": "HS256",
"typ": "JWT"
}
然后将头部进行base64加密(该加密是可以对称解密的),构成了第一部分.
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
playload部分
包含
- 标准中注册的声明
公共的声明
私有的声明
标准中注册的声明 (建议但不强制使用) :
- iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
公共的声明 :
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.
私有的声明 :
私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。
一个payload
例子
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
然后使用base64Url编码
signature部分
第三部分是签名信息,由三部分组成
- header (base64后的)
payload (base64后的)
secret
例如,如果要使用HMAC SHA256算法,将以以下方式创建签名:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
将这三部分使用.
连起来,构成了最终的jwt。形如
xxxxx.yyyyy.zzzzz
参考:
http://www.jianshu.com/p/576dbf44b2ae
https://jwt.io/introduction/#
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=720