2016-02-26 55 views
1

我想用Spring來設置一個REST-API。爲了保護它,我目前正在使用Spring Security oAuth2和JWT令牌。我的REST-API應用程序將是AuthorizationServer和ResourceServer。帶智威湯遜的Spring Security Oauth2是否真的無狀態?

我的問題是現在一旦生成令牌,在我的REST-API應用程序重新啓動後無效。當我運行它的2個實例時也是如此。在其中一個生成並且有效的令牌在另一個上無效。

我發現JwtAccessTokenConverter的實現是在啓動時隨機生成一個signingKey/verifierKey。這當然解釋了我的觀察,但給我留下了一個問題:這怎麼可能是無狀態的?

如果我的想法錯了,或者我錯過了一些重要的細節,請糾正我。但對我來說,這種行爲似乎擊敗了智威湯遜的目的。

+1

您確定您的JwtAccessTokenConverter實現在啓動時生成了一個隨機密鑰嗎?你的spring配置中沒有私鑰/公鑰嗎? –

+0

謝謝你的回答。是的,我敢肯定。我使用的是Spring實現,你可以在這裏找到https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/ oauth2/provider/token/store/JwtAccessTokenConverter.java您可以在第81和85行看到它是如何生成的。 –

回答

0

謝謝你到目前爲止的答案,但我只是想出了自己。

隨機生成的簽名/驗證者密鑰只是一個可能不應該使用的默認值。不幸的是,這沒有真正的記錄。 我現在在啓動時手動設置這些密鑰。結果是,我的令牌在我的所有REST-API實例上都是有效的,並且在重新啓動後仍然有效。

我猜這個隨機值更像是一個「安全默認」,這樣人們就不會不小心使用相同的已知密鑰。