Web Token

栏目: Java · 发布时间: 8年前

内容简介:Web Token

最近在一个新项目中,要做鉴权的事宜,于是 Token 的话题又被拿了出来,JWT 是一个很火的名字,但事实上,并没有人很了解这个东西,于是我准备自己来解释下。

Web Token

如何传递用户的安全信息

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 后,就变成这样的一个字符串:

Web Token

很小,这方便了它的传输,可以放在 Header 里,也可以放在 QueryString 中。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ruby on Rails社区网站开发

Ruby on Rails社区网站开发

布拉德伯纳 / 柳靖 / 2008-10 / 55.00元

《Ruby on Rails社区网站开发》全面探讨创建完整社区网站的开发过程。首先介绍开发一个内容简单的管理系统,之后逐渐添加新特性,以创建更完整的、使用Ruby on Rails 的Web 2.0 社区网站。还给出了开发和测试中的一些建议和提示,同时指导如何使网站更生动以及维护得更好。《Ruby on Rails社区网站开发》也探讨了如何与Flickr 、Google Maps 等其他平台集成,......一起来看看 《Ruby on Rails社区网站开发》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具