Created
April 18, 2018 02:03
-
-
Save qlong8807/ff0f06a0ab5f1d111d3f820d283e8137 to your computer and use it in GitHub Desktop.
JSON Web Token(JWT) - 在Web应用间安全地传递信息
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
一个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进行加密,加密的时候添加一个秘钥,这样就得到了签名字符串。 | |
这样把三个字符串连在一起,就得到了应用之间传递的字符串。 | |
如果头部和载荷被修改了,那么签名一定发生了改变,这样就可以拒绝服务。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
JWT标准定义 https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32