Paseto密钥
传统JWT
不同于session, 无状态token不被存储进数据库, 服务端只能验证它是否是由自己签发。一个传统jwt是这样的:
Header:
1 | { |
Payload:
1 | { |
Signature:
1 | base64UrlEncode(HMACSHA256( |
组合上面的所有信息, token就是:
1 | base64UrlEncode(header)+"."+base64UrlEncode(payload)+"."+Signatrue |
为什么需要用base64编码并用.分隔? 这是base64编码后就不会包含.符号, 这样很方便能用字符串操作把三个部分都拿出来。
PASETO
jwt的一个很low的点就是公开了信息。比如加密算法和一些公开信息, 而公开这些信息是完全不必要的, 也许会因为泄漏这些”公开信息”而造成麻烦。paseto则直接对payload进行了对称加密, 这样拿到token的人将无法获得任何”公开信息”, paseto不公开算法和payload。
一个paseto是这样的形式:
1 | v2.local.AAAAA.BBBBB |
AAAAA包含了加密版本的payload信息, BBBBB包含了企业信息的base64编码。要实现这样一个token直接用对称加密就完了, 这个token的v2用的协议是AES256 CTR + HMAC SHA384
。
go中生成PASETO
不必多说, 调轮子就完了
https://github.com/o1egl/paseto#key-differences-between-paseto-and-jwt