0

ログインに成功すると、ノード アプリケーションは JWT トークンを返します。

JWT は、ユーザー ID、有効期限、およびシークレットで署名されています。

ID が 1 のユーザーのトークンを生成する方法を次に示します。

    return jwt.sign({
        _id: 1,
        exp: exp_date),
    }, "MY_SECRET"); 
    };

私のバックエンドアプリケーションはトークンからユーザーを識別するので:

「id:1」を持つユーザーが有効なトークンを編集し、「id:2」で設定してから、「id:2」を持つユーザーであるかのようにバックエンド アプリケーションでふざけ始めることは可能でしょうか?

4

2 に答える 2

2

JSONの署名に使用している秘密鍵に誰かがアクセスしない限り、そうではありません

于 2016-10-01T13:48:12.663 に答える
1

シークレットは、後で検証するためにペイロードに署名するために使用されます。概念をよく示しているJWT の Web サイト ( https://jwt.io/ ) をご覧ください。

トークンのペイロードは暗号化されていないため、誰でも読み取り、場合によっては変更できます。ペイロードに最初に署名することにより、トークンが検証されたときに変更を認識する方法があります。そのため、誰かがユーザー ID を変更すると、ペイロードのハッシュ サムが変更され、秘密鍵がなければ署名を再作成する方法がありません。そのため、認識なしにトークンを操作することはできません。

署名インスタンスとトークンを検証するインスタンスの間で共有する必要がある単純なシークレットを使用する代わりに、秘密鍵で署名し、トークンの有効性を検証できる公開鍵暗号を使用する可能性もあります。署名済みトークン自体の作成を許可しない証明書。非署名サービスの 1 つが危険にさらされたときにトークンを操作する機会がないため、分散セットアップにはこのアプローチをお勧めします。

于 2016-10-01T14:02:12.923 に答える