可能很多人都写过API,都用过json web token(JWT)来做用户认证,那么,假设给你下面这么个token:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM
- 你知道这个token有几部分组成吗?
- 一个token每一部分是怎么编码的吗?
- 这段token里背后到底包含了哪些信息呢?它想干什么呢?
- 这个token是否值得我们信任呢?它有没有加密或签名过?有没有被更改过?
- 我们如何往这个token里添加信息呢?可以添加哪些信息呢?
- 假设这是个有效的token,它一旦签发出去,就相当于把锁的钥匙给了别人,就总是能打开门的,但我们如何让其失效掉呢?分别有哪些有效手段呢?
- JWT除了用来用户认证,还可以干些什么呢?
这个专场的目的,不是简单教我们用个Passport或jwt-auth组件,创建个token,能进行用户认证了就算完事,不,这种程度还根本不懂JWT,我们不只是借助个组件搞个用户认证,真正严肃的场合,你还是要知道JWT的背后原理。不是有把枪知道扣扳机就安全了,基本的枪械原理不懂,在战场上应该会死的很惨。
该专场作者lcobucci开发的组件lcobucci/jwt,基本上是所有PHP相关的jwt组件的底层库,laravel官方组件Passport的jwt部分是基于它实现的,大名鼎鼎的thephpleague/oauth2-server的jwt部分也基于它,国内很多人使用的tymondesigns/jwt-auth也是基于作者的这个组件实现的。我想其重要性已经不言而明了,当然了,实际依赖这个组件的,肯定更多,在此就不一一举例了。