接口设计需要给客户端签名吗?

目前接口是这样的:
在用户登录之后随机生成一个token 将token的值作为Redis缓存的key
缓存的值就是用户的信息 包括用户id,用户昵称 用户头像等;

接口访问和鉴权

用户在访问接口的时候会在header中携带token过去
在前置操作中检测token是否存在 并且是否有效 如果无效返回http code 401
如果有效 将token的过期时间增加 将用户id注入到请求对象里面的uid

服务类service\Token
该类提供对token的操作 比如过期时间的增加 根据token获取uid等

疑问

之后再网上看到说这样很不安全 需要有签名和签名算法

请问一下大家这个签名该如何设计以及使用??? 万分感谢

最后问下 我上面这种接口设计的方式是否合理? 因为是自学 所以没太多的人指教 所以有点懵

阅读 3.9k
5 个回答

如果加签名,建议最好全局都加,不要遗漏,保持统一。
并且安全性也会提高很多。签名的算法有很多,简单点的可以是

// 伪代码
按照字符升序(md5(时间戳+参数+你自定义一个key)+时间戳+参数 )

一般应用问题不大,在涉及金额支付类的操作时,不算特别安全

可以参考一下相关api服务的接口设计。针对每一次请求生成签名我觉得好一点。

需不需要签名以及加密,这个你可以考虑你系统安全性是否重要,也就是,结合业务安全性以及加需求的复杂性考虑。

我觉得你说的和JWT是一样的,有自己的数据,过期时间,颁发者,接受者,而且jwt也是放到Header里面的,自动检测是否过期,是否合法等。这样的话就不需要自己去设计编码,还有安全的问题了
链接:
https://jwt.io/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题