这里暂时不讨论oauth,想先好好理解好jwt
这里两个概念: 校验 和 登录保持 理解的不是很透
我目前是给了android和ios客户端一个密钥secret, 然后我服务端也是用的这个密钥
然后对客户端的诸如 时间戳,nonce等参数配合我给他们的这个密钥 多个参数加密为一个参数sign
然后一起传递给服务端,然后服务端在对前几个参数加上服务端的密码加密一下,最后判断是否等于客户端传来的最后那个参数sign
但是我现在认为我所做的上述验证貌似只能证明这次请求的客户端知道我服务端的秘钥,也就是说这次请求是我服务端允许的
但是至于用户有没有登录貌似还是不知道,所以我就让客户端给我加了一个参数token, 如果用户请求登陆接口并成功登录的话,我就把session存到redis一个月,然后把token=sessionid给返回,让他存储到客户端,下次带着来给我,如果我拿到的话并且在redis中能找到这个session就证明他是登录的
另外看网上有人说这个属于自定义jwt 是么?
我不知道我这么做和jwt的最大区别是什么
比如我这种方法是依赖于sessionid来判断用户的登录状态 服务端是存储了session的
Jwt我看了一会儿资料,好像是给客户端签发token之后 ,服务端好像并没有存这个token, 然后客户端的参数到了以后,貌似也只是做了我自己那种方法的第一步(就是做了多个参数和密钥加密后是否等于sign,) 但好像很多资料说这已经能证明登录了 要这样的话 我的那种方法是不是又用session判断是否登录是多余的
https://jwt.io/
JWT 的特点之一就是无状态,没有登录这个概念。
本来所谓登录也只是人类理解的一个概念,服务器可没这个概念。什么叫登录?有权限访问(登录后才可以访问的内容)而已。
jwt确实不用在服务端存token,因为token中就带有签发者、使用者、签名等信息,足以证明登录且未被篡改。因为一旦篡改,签名即不可验证了。至于sessionid,是不一样的。session主要是在服务端存一些其它的数据,这些数据可能是敏感的,不方便放在jwt中的。当然session只是存储的一种,你也可以存在redis中,甚至其他类型的存储系统中。其实呢你也可以把cookie看作token(虽然这是不对的,但是这样会更好理解),session只是其中的一个值,仅此而已。