JSON web Token,简称JWT,本质是一个token,是一种紧凑的URL安全方法,用于在网络通信的双方之间传递。一般放在HTTP的headers 参数里面的authorization里面,值的前面加Bearer关键字和空格。除此之外,也可以在url和request body中传递。
JWT有三部分依顺序用点号(".")链接而成:1.header,2.payload,3.signature。
header里面说明类型和使用的算法,比如:
{
"alg": "HS256",
"typ": "JWT"
}
说明是JWT(JSON web token)类型,使用了HMAC SHA 算法。这个值在链接之前需要用base64UrlEncoding加密。
payload是一组claim的值。claim包含claim name和claim value。前者是string类型,后者可以是任意的json对象。claims有三种类型:reserved claim,public claim 和 private claim。reserved claim是预先定义好的,不强制使用但推荐使用的一组claim,比如 iss(issuer 发布者), exp(expiration time 失效时间),sub(subject 主题),aud(audience 听众) 等。用于说明一些有用的交互信息。
public claim,是指由JTWs所定义的,但是为了防止和其他名字发生重名的claims。它们需要定义成IANA JSON web token registery 里面 或者定义成一个URI,这个URI包含一组固定的命名。
private claim 是客户自己创建的用于彼此分享信息。
举个例子:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
signature 就是用点号将header和payload联系起来,然后用header里面指定的加密方法进行加密后的字符串。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
应用场景:
1.浏览器将用户名和密码以post请求的方式发送给服务器。
2.服务器接受后验证通过,用一个密钥生成一个JWT。
3.服务器将这个生成的JWT返回给浏览器。
4.浏览器将JWT包含在authorization header里面,然后发送请求给服务器。
5.服务器可以在JWT中提取用户相关信息。进行验证。
6.服务器验证完成后,发送响应结果给浏览器。
OAuth2.0 是一个RFC协议,可以参考RFC6749,它定义了一个安全认证框架。
简单的说包含authentication 和authorization。 而openID connect 是基于这个框架上
的认证实现。上面说的JWT,也就是JSON web token, 在里面得到了应用,可以解决
跨域的问题,详细的资料,需要自己专研。
网友评论