Skip to content

Instantly share code, notes, and snippets.

@qlong8807
Created April 18, 2018 02:03
Show Gist options
  • Save qlong8807/ff0f06a0ab5f1d111d3f820d283e8137 to your computer and use it in GitHub Desktop.
Save qlong8807/ff0f06a0ab5f1d111d3f820d283e8137 to your computer and use it in GitHub Desktop.
JSON Web Token(JWT) - 在Web应用间安全地传递信息
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。
头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。
例如:{"typ": "JWT","alg": "HS256"},对其进行base64编码后得到eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9。
载荷也用json表示:
{
"iss": "John Wu JWT",
"iat": 1441593502,
"exp": 1441594722,
"aud": "www.example.com",
"sub": "[email protected]",
"from_user": "B",
"target_user": "A"
}
iss: 该JWT的签发者
sub: 该JWT所面向的用户
aud: 接收该JWT的一方
exp(expires): 什么时候过期,这里是一个Unix时间戳
iat(issued at): 在什么时候签发的;这些定义都可以在JWT标准中找到。
对上面的json进行base64编码后得到eyJpc3MiOiJKb2hu.......。
签名,把上面得到的两个字符串用.连在一起,然后用头部中的算法HS256进行加密,加密的时候添加一个秘钥,这样就得到了签名字符串。
这样把三个字符串连在一起,就得到了应用之间传递的字符串。
如果头部和载荷被修改了,那么签名一定发生了改变,这样就可以拒绝服务。
@qlong8807
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment