2016-06-14 12 views
0

私はJWTを要求してそれ以上の要求にそれを提供することによって自分自身を認証しなければならないサードパーティのRESTful Webサービスで作業しています。 私は自分のユーザー名とパスワードを投稿し、トークンを受け取るだけです。私はトークンの作成に使われた秘密も、ユーザー名とパスワード以外のものも知らない。外部から発行されたJson Webトークンから有効期限を抽出/デコードする方法

JWTの有効期限を確認してから、後続のWebサービス要求に再利用するか、更新する前に確認したいと思います。私はちょうどそれを使用することができ、何らかの種類の有効期限の例外をキャッチすることができますが、私はしたくないと知っています。

私はこのチュートリアルに従うことを試みた:https://stormpath.com/blog/token-auth-for-java]

[しかし、私は署名鍵を提供しなければならない時点で動けなくなります。

私はそれをエンコードする秘密を持っていないので、どうすればいいですか?

さよなら:私はgroovyとwsliteとこの1つで作業しています。

答えて

1

トークンの本体を取り出してデコードするだけでよい。

秘密鍵がJWTのボディを暗号化するために使用されていない、ちょうど署名を生成するために使用されます...だから

、Groovyであなただけ行うことができます:の

// A JWT from the link you gave above 
String key = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJleHAiOjEzMDA4MTkzODAsInN1YiI6InVzZXJzLzg5ODM0NjIiLCJzY29wZSI6InNlbGYgYXBpL2J1eSJ9.43DXvhrwMGeLLlP4P4izjgsBB2yrpo82oiUPhADakLs' 

// Just the body (middle section) 
String body = key.split(/\./)[1] 

// Un base64 it (using the Java 8 Base64 class) 
String unencoded = new String(Base64.decoder.decode(body), 'UTF-8') 

// Parse the json into a map 
Map data = new groovy.json.JsonSlurper().parseText(unencoded) 

// Get the expiry 
long exp = data.exp 

assert exp == 1300819380 

をもちろん、トークンの本体にはあなたが見るための期限切れの形式が含まれていなければならないということは何もありません...内部IDである可能性があります

+0

私は休暇から戻ってすぐにそれを試してみるつもりです。有効期限情報がない場合は、これにどのように対処しますか? –

+0

期限が切れたときに通知されない場合は、期限切れ例外をキャッチして再検証してから再試行する必要があります –

0

エンコードに使用されている暗号がわからない場合や、暗号を解読したい場合は、トークンからの情報をデコードできません。 'トークンでコード化されなければならない標準的な情報'のようなものはありません。暗号化された情報を含むべきトークンは必要ありません。その場合はDB内にランダムに生成されたUUIDそれをまったくデコードすることはできません。

+0

しかしトークンは情報有効期限のように –

+0

@tim_yatesあなたの意見では、Base64エンコーディングはそうではありません暗号化の一種? –

+0

ええ、シーザー暗号と同じ方法です。しかし、あなたは「暗号を知らなければ...」と言っていますが、もちろん「暗号」_を知っています... [仕様書の第3章](https ://tools.ietf.org/html/rfc7519#section-3) –

関連する問題