2017-03-07 14 views
1

同僚と私自身は、トークンのトークンの検証方法を理解しようとしていましたが、私たちの読んだところでは、自分自身を混乱させるようです。jwtトークンの確認[rsa]

誰かが私の考えは

  • トークンは、秘密鍵を使って署名されている正しいかどうかを確認することができますしてください。署名は、秘密鍵を使用して暗号化されたヘッダーとペイロードの組み合わせであり、署名の最後の部分としてjwtに追加されます。
  • トークンを確認するために、受信者は公開鍵を使用してこのプロセスを複製できます。ヘッダーとペイロードを暗号化して、署名と同じかどうかを確認します。これは復号化ではないことに注意してください。受信者はトークンを解読していません(これは私たちが確信している主な事です)。 - 新しいトークンを暗号化する秘密鍵がないため、受信者は新しいトークンを発行できません。

私はRS256とHS256の両方でjwtのドキュメントを読んでいますが、それでも私の思考、したがって投稿を確認するのに苦労しています。

答えて

2

トークンがデジタル秘密鍵と公開鍵のペアを使用して署名、または秘密鍵を使用してハッシュすることができます公式サイトでJWTの認証トークンの詳細な説明を取得することができます:

  • RS256:RSA KeyPair with SHA256。トークンは秘密鍵で署名され、公開を使用して検証されます

  • HS256:SHA256のHMACキーです。トークンに署名するために使用されるアルゴリズムを含む、JWTのヘッダ:鍵が署名し、コンパクトなJWTはこのhhhhh.ppppp.sssss

    • hhhhhのように見えます

    検証することと同じです。例えば{"alg":"RS256","typ":"JWT"}。 base64url

  • pppppでエンコード:JWTのペイロードは、subissまたはexpのようないくつかの有用な主張が含まれます。 base64urlでエンコード

  • sssss:ヘッダーとペイロードのbase64 url​​エンコーディングと指定されたアルゴリズムを連結してbase64でエンコードしたJWTの署名。あなたの質問に答えるなどはb64(signature(hhhhhh.pppppp))

、あなたは、クライアントが

(クライアントとサーバの共有キーを意味するだろうHMACキーと検証)公開鍵を使用してトークンを検証鍵ペアを使用して RS256に参照のうえされています

トークンは上記のアルゴリズムで署名されています(暗号化されていません)。検証するために、クライアントは、提供された公開鍵を使用して、トークンの最初の部分と署名が一致することを確認します。hhhhhh.ppppppデジタル署名検証は、現代のすべての言語でサポートされている標準的な操作です。暗号化/復号化と同じではないことに注意してください。

+0

検証するには、クライアントは、提供された公開鍵を使用して、署名がトークンb64u(hhhhhh).b64u(pppppp)の最初の部分と一致することを確認します._この部分はどうやって起こりますか? –

+0

コンパイル済みのJWTで、 'hhhhh'と' ppppp'がb64urlでコード化されています。テキストが混乱する可能性があります。 – pedrofb

+1

クライアントはbase64から署名をデコードし、提供された公開鍵(擬似コード 'verify = verify(signedData、b64_decode(signature)、publicKey)'と一致することを検証します。 'signedData'は' hhhhh.ppppp 'デジタル署名検証は、ほとんどのプログラミング言語でネイティブにサポートされています(内部的には、公開鍵を使用して、signedDataと一致する署名に含まれるハッシュをチェックします)。 – pedrofb

0
+2

私はすでにそれを読んでいますが、私たちはまだ混乱しています。したがって、ポスト。 –

関連する問題