@IT·互联网程序员开源工具技巧

JSON Web Token

2017-04-25  本文已影响300人  老码农不上班

首发于 个人博客
使用 JWT 开发过两个项目,其一是区块链轻钱包接口开发,另外一个项目是对接中国移动和某银行支付渠道。实现接口的授权和明文数据加密,确保客户端和服务器之间的数据安全传输,比较适合用在 HTTP 接口认证、数据加密传输的应用场景。
JSON Web Token (JWT) 是一种约定的开放标准 RFC7519 ,报文内容简洁且能够携带信息,方便安全地在客户端和服务器之间传输。加密之后的信息是可信任和可验证并能解密出明文,有两种方式加密:HMSC 算法(HS 256)、公私钥(RS256)
进一步解释 JWT 的两个特性

JWT 使用场景

基本上有两种应用场景

JWT 的结构

JWT 有英文句号(.)分隔开的三部分组成,分别是:

  1. Header
  2. Payload
  3. Signature

所以,完整的 JWT 结构为

xxxx.yyyy.zzzz

就这三部分,进一步分别讨论。

Header

Header 由两部分组成:token 类型,值为 JWT ;算法类型,值为 HS256RS256,例如:

{
  "alg": "HS256",
  "typ": "JWT"
}

然后 JWT 通过 Base64Url 编码成 JWT 的第一部分

Payload

payload 包含了 claims ,其中 claims 大概有如下三种类型。

payload 的一个例子:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

payload 的明文会被 Base64Url 编码为 JWT 的第二部分。

Signature

JWT 最后一部分是 Signature, 由第一部分和第二部分再加上指定的算法加密而得到。例如使用 SH 256 算法生成 signature

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

第三部分被用来验证客户端是谁,及确保密文没有被篡改。

总结

接口验签和明文加密,JWT 确实是一种不错的选择。现在开发 API 是比较常见的需求,对于后端开发者来说投入时间了解掌握 JWT 高收益的事儿。
在实际的开发过程中,官方及第三方开发者基本都开发出覆盖各种编程语言的 Libraries。接下来我打算用 Ruby 实现一个完整的 JWT 加密验签和解签的 Gem

参考阅读
Introduction to JSON Web Tokens

上一篇下一篇

猜你喜欢

热点阅读