内容简介:Web Token
最近在一个新项目中,要做鉴权的事宜,于是 Token 的话题又被拿了出来,JWT 是一个很火的名字,但事实上,并没有人很了解这个东西,于是我准备自己来解释下。
如何传递用户的安全信息
HTTP 的无状态特性
在 Web 应用中,经常要处理的一类问题是,验证。如何记住当前是哪一个用户是一件很麻烦的事情。
这是因为 HTTP 协议是短连接,每次请求都是无状态的,这使得每次客户端和服务器都需要在会话时,带上 我是谁 这个信息。
用户安全信息常用有两种方式:
- Cookie / Session
- Token
:low_brightness: HTTP Cookie
HTTP 协议 中有关于 Cookie 的定义。人们可以通过将数据写入 cookie ,每次 HTTP 请求都带上这段信息的方式来进行信息传递。
用户安全信息不属于业务的部分,被放在 Cookie 里再适合不过了。
通常,在 Cookie 里记录着用户的安全信息,这些信息包括 token,或者一些用户的数据,以减少服务端每次查询的压力。
但浏览器为了安全考虑,通常对 Cookie 做了严格的限制,像不得跨域携带等,在 API 时代,Cookie 更加的不方便使用。
:low_brightness: HTTP Request
于是,一个解题的新思路就来了,能不能把数据放在 HTTP 的请求头中,像 Header 或 QueryString 中。
我们把这种方式叫做 Web Token。
好处显而易见,不再有跨域的麻烦,而且是 HTTP 标准,处理起来也很方便。
Web Tokens
我们定义了 Web Token 在请求体中的位置,但 Web Token 的格式,还没有做要求。理论上一个请求体上的内容,如果仅是自己在用的话,怎么写都可以,但当各方站点需要一起通讯的话,或者为了方便交流的原因,也会形成一个共用标准的。
于是就有以下几种常见标准:
- JSON Web Tokens (JWT)
- Simple Web Tokens (SWT)
- Security Assertion Markup Language Tokens (SAML)
对比。
SWT 定义了文本的格式,有几个字段的标准,最终生成的是这些字符串的 base64
而 SAML 则是使用 XML 格式
JWT 则使用 JSON,除此之外,JWT 还定义了一些字段的要求
:low_brightness: SWT
SWT 只在 MSDN 和 JWT 的说明文档上见到,可见使用不是特别的广泛。
这是它的定义部分:
Issuer = issuer.example.com ExpiresOn = 1/1/2010, Midnight com.example.group = gold over18 = true
Base64 后的结果
N4QeKa3c062VBjnVK6fb+rnwURkcwGXh7EoNK34n0uM=
:low_brightness: JWT
JWT 是目前最火的 Web Token 协议,已经被加入 RFC 中了。这得益于 JSON 的优点,广泛的平台和比较轻巧的格式。
简单的说,它使用了 JSON 格式,由三个部分组成:
- Header
- Payload
- Signature
{
{
"alg": "HS256",
"typ": "JWT"
},
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
}
它的值被 base64 后,就变成这样的一个字符串:
很小,这方便了它的传输,可以放在 Header 里,也可以放在 QueryString 中。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Web Token
- JSON Web Token概述
- JSON Web Token学习笔记
- JWT(Json Web Token) 科普
- JSON Web Token – 在 Web 应用间安全地传递信息
- 深入了解Json Web Token之实战篇
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Think Python
Allen B. Downey / O'Reilly Media / 2012-8-23 / GBP 29.99
Think Python is an introduction to Python programming for students with no programming experience. It starts with the most basic concepts of programming, and is carefully designed to define all terms ......一起来看看 《Think Python》 这本书的介绍吧!