2016-07-14 6 views
1

私はjjwtライブラリの概要を読んでいる:トークンを構築jwt:JWTトークンを検証する際に署名アルゴリズムが必要ないのはなぜですか?

は、以下のように行われる:

import io.jsonwebtoken.Jwts; 
import io.jsonwebtoken.SignatureAlgorithm; 
import io.jsonwebtoken.impl.crypto.MacProvider; 
import java.security.Key; 

// We need a signing key, so we'll create one just for this example. Usually 
// the key would be read from your application configuration instead. 
Key key = MacProvider.generateKey(); 

String compactJws = Jwts.builder() 
    .setSubject("Joe") 
    .signWith(SignatureAlgorithm.HS512, key) 
    .compact(); 

としてトークンが検証されています

try { 

    Jwts.parser().setSigningKey(key).parseClaimsJws(compactJws); 

    //OK, we can trust this JWT 

} catch (SignatureException e) { 

    //don't trust the JWT! 
} 

SignatureAlgorithm.HS512が使用されていません2番目のスニペットでそれはどのように推定されますか?それとも必要ないのですか?

答えて

2

JWTは、ヘッダ内のアルゴリズムを含むので、バリデータは、あなたがhttps://jwt.io/でこのトークン(試験の最初の部分をデコードする場合、単に例えば、トークン

の最初の部分をデコード使用する必要があるアルゴリズムを知っているので)

eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.O8YgYdD1YxficWfO_06nDsm_YgDdXmgMM4CN3bLor5c 

@pedrofbアルゴリズムは、好都合ヘッダ内の、およびCAに含まれている言及したように

{ 
    "alg": "HS512", 
    "typ": "JWT" 
} 
+0

しかし、最初の部分をデコードするアルゴリズムは必要ありませんか? –

+0

いいえヘッダー(最初の部分)とペイロード(2番目の部分)はbase64urlでエンコードされています。署名アルゴリズムは署名を検証するためにのみ必要です(第3部) – pedrofb

+0

ok私はRFC文書をよく見てください。ありがとう –

1

に対応非対称アルゴリズムの場合、kidヘッダーパラメーターで使用されたキーを見つけることもできます。あなたがをデコードするときにを期待アルゴリズムのみを許可に非常に慎重でなければならないこと

ヘッズアップ。そうでない場合は、alg=noneで署名されたトークンを受け入れることになり、基本的に検証をバイパスします。

ほとんどのデコーダはこれをサポートしています(そうしなければ、そうしなければなりません)。あなたのパーサはまたalg=noneを受け入れる場合

//OK, we can trust this JWT 

は本当ではないかもしれないとして、あなたの特定の例は、しかし気になるようです。だから気をつけて!

+0

ニースポイントピーテル! –

関連する問題