2014-02-19 217 views
5

我想使用Spring Security設置一箇中央認證/授權服務器,從中可以獲取JWT令牌,然後我可以使用它訪問另一個Spring Security備份的REST服務器上的受限資源。Spring Security JWT和Oauth2

這裏是我的流程:

1)HTML JS /手機等客戶端身份驗證服務器進行身份驗證,以獲得JWT令牌 2)客戶端的HTTP標頭髮送此令牌REST服務器來獲得對安全資源

訪問

我認爲JWT最適合這種情況,因爲它可以包含所有相關數據,而REST服務器可以完全無狀態,並簡單地解碼令牌以獲得REST服務器上的所有必要數據(角色,CLientid,電子郵件...)。

Oauth2是否是正確的選擇,如果有的話可以有人親切地指向我的方向?如果JWT不是正確的選擇,我可以接受其他解決方案:)我應該提到,在我的情況下,也可以在REST服務器上從數據庫加載客戶端信息,但它不應該負責認證用戶這意味着沒有用戶名/密碼檢查,只是令牌解碼/驗證...)

回答

3

Cloudfoundry UAA是一個開源OAuth2身份管理解決方案(Apache 2),它發佈JWT令牌。你可以看看它的實現方式,或者只是自己使用它,無論是作爲服務器還是隻是JAR。它在Spring OAuth中實現了一堆現有的策略。它也可以有自己的用戶數據庫,或者你可以實現你自己的。有很多選項和擴展點,許多人以各種方式使用它(不是所有人都使用Cloudfoundry),因爲它被設計爲通用的。

Spring OAuth 2.0也有support for JWT tokens,但它還沒有發佈(大部分實現是從UAA中提取的)。

但是,既然你說你不介意不透明的令牌(和數據庫loookup),你可能更喜歡在Spring OAuth 1.0中使用JDBC support。在我們轉移到智威湯遜之前,它在Cloudfoundry中使用了相當長的一段時間,所以我可以在生產中擔保。

至於OAuth2是否是您的使用案例的不錯選擇:您處於決定這一狀況的最佳位置。到目前爲止,你所說的沒有什麼讓我覺得這是一個壞主意。如果有幫助,我會做一個演示(如果你喜歡這樣的話,你可以在SpringSource頻道的YouTube上找到它)。

+0

將UAA變成社交網絡集成和啓用Ajax的SSO有多困難。我想我會在UAA本身添加這些功能。可能oauth2不適用於SSO,但它是否支持單一註銷機制? – beku8

+1

不太難。但是,你需要什麼?你想爲社會網絡使用sso併發行你自己的代幣?如果是這樣,那麼你只需要改變認證過程。 OAuth2並不是專門爲sso設計的,但很多人都是這樣使用它 - 這就是爲什麼Facebook例如(UAA本身公開/ user_info出於同樣的目的)。 –

+0

它會給使用spring security + spring oauth2 + spring jwt編寫自定義代碼的好處,而不是使用uaa嗎? – user1595858

0

AlvaroSánchez開發了一個jwt兼容插件。 http://alvarosanchez.github.io/grails-spring-security-rest/1.5.0.RC4/docs/guide/tokenStorage.html#jwt

BuildConfig.groovy安裝最新版本:

compile ":spring-security-rest:1.5.0.RC4", { 
     excludes: 'spring-security-core' 
    } 

您只需更改祕密選項Config.groovy中

grails.plugin.springsecurity.rest.token.storage.jwt.secret = 'YourSecretKey' 

,並設置chainMap分離與傳統模式的安全管理新的無休無息的安全。

grails.plugin.springsecurity.filterChain.chainMap = [ 
     '/yourApi/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter', // Stateless chain 
     '/**': 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter'                   // Traditional chain 
    ] 

您可以使用spring-security-core插件管理應用程序中的授權和身份驗證。

相關問題