cookie,token验证的区别

2017-06-16  本文已影响0人  吃柠檬的刺猬

目前全文是翻译的,讲的主要是 cookie 验证和 token 验证的区别,cookie 验证准确的说是利用 cookie 来作为媒介,存储 session ID 进行验证,token 其实也可以借助 cookie 来存储,不过下文中提到的 cookie 验证主要是指 session ID 存储到 cookie 中进行的验证。token 验证主要是指 token 存储在 Authorization Header 中进行的验证。
这个翻译并不是完全按照原本逐字意译,有的是我看了原本以后根据自己的理解写了出来,同时省略了一些我认为不重要的内容,加了一点我自己的笔记和疑问的地方。
原文地址:https://auth0.com/blog/cookies-vs-tokens-definitive-guide/

下面是译文:


cookie-token-auth.png

Cookie
cookie 验证是用于长时间用户验证,cookie 验证是有状态的,意味着验证记录或者会话需要一直在服务端和客户端保持。服务器需要保持对数据库活动会话的追踪,当在前端创建了一个 cookie,cookie 中包含了一个 session 标识符。传统 cookie 会话的验证流程:

Token
token 验证是无状态的,服务器不记录哪些用户登录了或者哪些 JWT 被发布了,而是每个请求都带上了服务器需要验证的 token,token 放在了 Authorization header 中,形式是 Bearer { JWT },但是也可以在 post body 里发送,甚至作为 query parameter。
验证流程:

Token 验证的优势

共同的问题
这里介绍一些常见的问题,或者在令牌 token 的情况下出现时经常出现。这里的关键重点将是安全性,但我们将介绍有关 token 大小,存储和加密的用例。

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

JWT 的格式为 header.payload.signature
,如果我们需要通过 HMACSHA256 算法签发一个 JWT ,如果 secret 是 'shhhh' 以及 payload 是
{ "sub": "1234567890", "name": "Ado Kukic", "admin": true}
则 JWT 为
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkbyBLdWtpYyIsImFkbWluIjp0cnVlLCJpYXQiOjE0NjQyOTc4ODV9.Y47kJvnHzU9qeJIN48_bVna6O0EDFiMiQ9LpNVDFymM

(疑问:secret 在这里是干嘛的)
这里有一个非常重要的提醒,token 是通过 HMACSHA256 算法生成,header 和 payload 是 Base64URL 编码,这不是加密。如果你去访问 jwt.io 网站,粘贴 token 以及选择 HMACSHA256 算法,可以解析出 token 读取它详细的内容。因此里面不能携带一些敏感数据,比如密码,绝对不能存储在 payload 中。
如果你必须存储敏感信息在 payload 中,或者使 JWT 被隐藏,你可以使用 JWE(JSON Web Encryption)。JWE 允许你去加密 JWT 的内容,让其除了服务器以外的任何人都不可读。JOSE 为 JWE 提供了一个很好的框架,并为许多流行框架(包括 NodeJS 和 Java)提供了 SDK。

token 验证在 Auth0 上的实践
未完待续...

上一篇下一篇

猜你喜欢

热点阅读