关于token验证几点不明白的地方

weixin_32677371 2019-01-14 10:11:53
因为之前没有用过token的验证机制,一直用的session。
把userid+随机字符串+当前时间进行md5加密后生成token,写入到缓存中,设置过期时间7200秒,如果过期了就在重新生成token,token对应的就能拿着userid的值 ,应该是这个逻辑对吧!
最近用了一个layadmin框架,官方也是建议采用token验证的方式。每次往后台请求数据的时候就带上token,然后服务器端验证token是否合法。这就有点像微信公众号通过appid和appsecret生成token一样,每次请求就要带上token。这个好像是理解了,但在验证这一层面有几点不明白。
我写了一个应用,帐号是admin密码是admin888,用帐号加密码进行aes加密后生成token保存到cookie中。如果我拿到了cookie中的token值 ,不需要帐号密码一样可以进入后台呀。

所以要设一个过期时间,保存在cookie中的token 7200秒后就过期,过期又重新生成。重新生成的时候还是用的admin和admin888来生成,那么意思还要把当前的帐号admin和密码admin888继续保存在一个地方以便token过期后继续生成用吗?

还有就是我用admin和admin888通过aes加密生成token后,如果token过期了,把生成的token进行解密重新在生成一次。但token过期后在cookie里又获取不到之前生成的token值了啊?

想想公众号的逻辑,token过期就要用appid和appsecret重新生成一次,应该还是要有个地方保存着用户的帐号和密码才对,如果保存在session中,那何必又用token机制来做应用呢?
...全文
472 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yt_php 2019-01-14
  • 打赏
  • 举报
回复
了解下auth2.0协议,和php-jwt组件
yt_php 2019-01-14
  • 打赏
  • 举报
回复
一,关于token验证 session验证有三个不容易解决的特点: 1,session文件过多导致的性能问题 2,多台服务器如何共享session 3,csrf攻击(cookie劫持) 那么token来解决这三个问题时, 1,token验证不依赖session,所以验证不需要每次都判断服务端是否保存了用户信息。token在生成时,会将一些关键字段进行加密,包括expires过期时间。token验证只需要验证expires和其他字段是否符合,即是授权用户。登陆一次之后,就不需要再次验证账号密码了。这点请了解下php-jwt组件文档。 2,不需要session所以不存在session共享。 3,token保存客户端服务器,通过header头发送。 token方式严格来说,token并不是存储在cookie中的。 如果存储在cookie中,那么安全就不能被保证了,因为cookie是暴露的。 这种方式也叫api接口开发方式。客户端和服务端可以是一个服务器,也可以不是一个服务器。 二,token过期 服务端有刷新token的功能,即在token即将过期时,携带旧的token,生成新的token。 所以你目前使用token验证方式,只解决了1,2两点问题。 真正的token接口开发,token都是存储在客户端(服务器)的,当请求微信公众平台时,是不是在服务器中发起请求呢?
xuzuning 2019-01-14
  • 打赏
  • 举报
回复
token 出现的原因是: 1、cookie 是以明文传递的,很容易被拦截和伪造 2、大多移动设备都不支持 cookie 从安全角度出发,token 是用于验证的备份方案,必须与原有的验证方案以不同的方式传递 带有 有效期 的 token,只能加密,而不是索引(md5、hash)

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧