【问题标题】:How is security achieved with JWT encoding?JWT 编码如何实现安全性?
【发布时间】:2016-08-23 05:09:45
【问题描述】:

假设我像这样创建了一个令牌:

def create_token(userId):
    payload = {
        # subject
        'sub': userId,
        #issued at
        'iat': datetime.utcnow(),
        #expiry
        'exp': datetime.utcnow() + timedelta(days=1)
    }

    token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
    return token.decode('unicode_escape')

节点socket.io

io.sockets
    .on('connection', socketioJwt.authorize({
        secret: 'SOME SECRET',
        timeout: 15000
    }))
    .on('authenticated', function(socket) {
        console.log('hello! ', socket.decoded_token);

        socket.on('message', function(message) {
            console.log(message);
            io.emit('message', message);
        });
    })
    .on('error', function(error) {
        console.log(error.type);
        console.log(error.code);
    });

现在,我将使用用户 ID 来识别通过身份验证后发送消息的用户。这种识别哪些用户已发送消息的方法有多安全?伪造令牌并冒充用户需要什么?只知道秘钥?可以使用哪些方法来破解这种形式的安全性?如何确保所选的这种安全方法是安全的?

【问题讨论】:

    标签: security encryption socket.io jwt


    【解决方案1】:

    JWT 的格式为 XXXXX.YYYYY.ZZZZZ,其中 XXXX 是标题信息 YYYYY 是有效载荷 ZZZZZ 是带有您的安全密钥的有效负载的哈希值。

    由于 JWT 仅使用 Base64 编码,任何人都可以解码 JWT 并查看有效负载。但是,如果他们更改了值,则有效负载不会散列到与 ZZZZZ 相同的值,因此令牌将变为无效。此方法使令牌不会被篡改(只要没有其他人拥有用于签署令牌的安全密钥)。但是,由于任何人都可以读取令牌,因此不应将任何不应查看的敏感数据包含在有效负载中,或者进行加密。

    要伪造令牌,或篡改令牌并更改用户 ID,黑客需要您的安全密钥。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-19
      • 2016-08-30
      • 2020-09-02
      • 2014-12-08
      • 2011-05-25
      • 1970-01-01
      • 2013-08-26
      相关资源
      最近更新 更多