内容简介: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之实战篇
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。