2017-02-07 43 views
1

我需要從JWT中提取聲明。如何從JWT獲取索賠?

看起來,這應該是一個不容易的事情。

,已簽字,從標題,我得到:

{ 
    "alg": "RS256", 
    "typ": "JWT" 
} 

JWT:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJtYXJrLnN0YW5nQGRoaWdyb3VwaW5jLmNvbSIsInNjb3BlIjpbIm9wZW5pZCJdLCJyb2xlcyI6WyJKT0JTRUVLRVIiXSwiam9ic2Vla2VySWQiOiJ3TDFkTWdQckZWOUl5dEZZIiwiZXhwIjoxNDg4Mzk1ODE5LCJhdXRob3JpdGllcyI6WyJKT0JTRUVLRVIiXSwianRpIjoiNWRiYjNkYzQtNGI3NC00MDYyLTgzMmQtYjE1MTgwYWZhZjllIiwiY2xpZW50X2lkIjoiZWZjIn0.NxiF4x39na3KdDUFz2zxqy1zSfJkj4FdKHflpgJUxzMgBq8bbJIFVkmwAUYA6_YXm6kGFcyTMgdiRIJpqc5buDPdV1vkzh4QKFTxMz9MF4i3 vtIQ21Vm5W12KikWdWGGUXMD4udJwu7rmuIBtNIa-ciZOPADNrrXfuw7iML1xxAA-C0f4OTbiKqiXr3QEUZwcqZB17qfh_dVRRxgO-_uHUg84JDcpXEDQPzPWX68u1EHH4J6IcpMKn1VY9k3RcZU6pq-ndzQgBlKdVm2owA6i-UM9p1zSz7ZX_2wx0czEEcNF1rMdeIv5yxP9YEpWb14-GUG4qgpn_rAIQBJ7eu7xw

經過解碼的jwt.io現場就好了,但因爲我沒有「祕密」鍵,它是「無效的簽名來了」。這很好,我不想驗證它。

我只想要的是聲明,但是當我使用Java庫來解碼它時,我什麼也得不到,只有錯誤。

如果我手動解碼它(即拆分/ base64解碼),它很好。

那麼,我在做什麼錯誤的Java庫?

+1

我們如何在沒有看到您的代碼的情況下回答您的問題? –

+0

讓我知道我的答案是否適合你。 –

+0

我的代碼是我在SO上發現的。我正在尋找的是如何讓圖書館之一在沒有我編寫代碼的情況下提取聲明。 –

回答

2

一旦問題標記爲,我理解您使用jose4j解析JWT令牌。

在這種情況下,您可以從JwtConsumerBuilder調用setSkipSignatureVerification()。它允許您在不驗證簽名的情況下解析索賠:

JwtConsumer jwtConsumer = new JwtConsumerBuilder() 
            .setSkipSignatureVerification() 
            .build(); 

JwtClaims jwtClaims = jwtConsumer.processToClaims(jwt); 
+0

'alg'就是'RS256',所以我想會有一些公鑰用來驗證簽名 – pedrofb

+0

@pedrofb好點!但由於某種原因,OP只關心解析索賠而沒有任何簽名驗證。 –

+0

我認爲,也許不正確的是,添加對外部數據片段(即公鑰)的依賴性可能會使我的代碼變得「脆弱」。密鑰的任何更改都要求我更改我的代碼或至少對更改做出反應。當發生這種情況時,我的代碼被破壞了。 –