JsonWebToken 折腾相关

Nodejs cyanprobe 7年前 (2017-05-18) 4966次浏览 已收录 4个评论

前言:

最近折腾相关。
走了个流程,写了个快捷点的,定义个骨架那种,只完成了验证和签发,用了不到一天半时间。
https://github.com/fangker/n-jwtproxy
JWT无法避免重放攻击,每15-30分钟重新签发一次,jti可以解决上面问题,每次更新ID,token相比于session更能够胜任分布式…完全是扯淡。。每次更新ID还要用到redis,再者明文秘钥不安全,正确的姿势是每次根据用户名+某规则生成JTI然后存redis生成随机秘钥,每次用用户的随机秘钥来验证用户自己。。且jwt payload部分明文不能带有敏感信息。。这样来说还不如用session来的实在。。因为你不可能以这种方式来进行减压,会导致服务器客户端状态不同(而且并没有减少一次查核的操作-靠这东西来区分权限)。目前jwt在单点登录和移动设备上有的一玩(无法举出反例没接触)。
补充: 关于TOKEN防止CSRF攻击的情况,早上恶补了知识,答案是没有session你搞毛。CSRF 可以看下csrf这个模块 https://github.com/pillarjs/csrf/blob/master/index.js  采用的方式是uid+秘钥验证的方式,表单附加 随机token,代码很清晰 还是需要redis来存key。其实也可以对cookie进行签名用单一key的话,当然知识单纯对于跨站来说。
总结一句话:比较弱鸡。。。。

es6的代理:

代理使用示例 来自 http://www.oschina.net/translate/use-cases-for-es6-proxies
试用了几发,实用性一般,但是某些时候也有用处 反射那一块也挺有意思(恍恍惚惚在略拾)。

// Define a validator that takes custom validators and returns a proxy
function createValidator(target, validator{  
  return new Proxy(target, {
    _validator: validator,
    set(target, key, value, proxy) {
      if (target.hasOwnProperty(key)) {
        let validator = this._validator[key];
        if (!!validator(value)) {
          return Reflect.set(target, key, value, proxy);
        } else {
          throw Error(`Cannot set ${key} to ${value}. Invalid.`);
        }
      } else {
        // prevent setting a property that isn't explicitly defined in the validator
        throw Error(`${key} is not a valid property`)
      }
    }
  });
}
// Now, just define validators for each property
const personValidators = {  
  name(val) {
    return typeof val === 'string';
  },
  age(val) {
    return typeof age === 'number' && age > 18;
  }
}
class Person {  
  constructor(name, age) {
    this.name = name;
    this.age = age;
    return createValidator(this, personValidators);
  }
}
const bill = new Person('Bill'25);
// all of these throw an error
bill.name = 0;  
bill.age = 'Bill';  
bill.age = 15;

CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:JsonWebToken 折腾相关
喜欢 (1)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(4)个小伙伴在吐槽
  1. 前来为大神鼓掌
    姜辰2017-05-21 23:11 回复
  2. 群主,我也觉得jwt就是个鸡肋,还不如直接cookie,session来的实在
    2017-09-12 10:58 回复