JSON Web Token

jwt的基本概念

External Vs Internal

By Value Vs By Beference

  • jwt is by value
  • session ID is by reference

jwt is encoded, not encrypted.

jwt can vs session ID, not vs cookie

jwt是经过base64编码的,并非加密过,如果想加密payload中的内容,需要手动加密。如果不加密,一定要部署在HTTPS之上,否则都会是明文。

jwt可以用来替代seesionID,它可以被存储在Cookie中。

JWT第三部分的签名有2中方式,一种是HASH,一种是PKI,如果是多个分布式为服务的化,用PKI校验比较方便,多个校验服务使用公钥进行校验。

jwt相关的库

github里代码质量层次不齐,选用库前要仔细甄别。

Knock for Rails

Knock 针对Rails应用封装了ruby-jwtgem。可以定制payload字段和auth字段,不单单是email

  1. 用户携带用户名密码,请求获取token,token中包含user.id和过期时间。
  2. 用户每次请求都携带token,服务器端根据token中的user.id信息确认用户。
deer-api

这是我在Revel框架基础上开发的带有jwt功能的API服务。 https://github.com/netqyq/deer-api

Resources

https://jwt.io/ https://github.com/auth0/go-jwt-middleware https://github.com/nsarno/knock http://openid.net/ https://www.youtube.com/watch?v=tj9KDnBSn4E https://github.com/coreos/dex