2011-09-01 82 views
1

我想設置一個spring 3 webapp作爲另一個爲oauth2提供受保護資源的應用程序的代理。定製spring-security AuthenticationProvider可以設置OAuth2安全上下文嗎?

我們正在使用UsernamePassword授權類型。 我的應用程序不應該知道用戶數據庫;實際上它會查詢其他應用程序以獲取有關用戶的詳細信息(他們擁有哪些權限,其他信息)。

我的應用程序負責顯示登錄頁面。

我想用一個自定義的彈簧安全的AuthenticationProvider那會:

  • 連接到OAuth的服務器獲得的訪問令牌
  • 然後使用OAuth2RestTemplate查詢,試圖登錄的用戶,在爲了獲得其授權機構,和其他細節
  • 建立一個UserDetails出來。 (我的AuthenticationProvider會延伸AbstractUserDetailsAuthenticationProvider)

的問題是:

  • ,因爲我使用的配置我的春天應用程序,春天增加了一個OAuth2ClientSecurityContextFilter到過濾器鏈
  • 當「retrieveUser」我的AuthenticationProvider類的方法被調用,這個過濾器有不是已經通過了但是
  • 所以如果我嘗試在我的內部使用OAuth2RestTemplate重寫'retrieveUser'方法,我得到一個異常:

    java.lang.IllegalStateException:No OAuth 2 security context has been established。無法訪問資源'avop-services'。 在org.springframework.security.oauth2.consumer.OAuth2ClientHttpRequestFactory.createRequest(OAuth2ClientHttpRequestFactory.java:38) 在org.springframework.http.client.support.HttpAccessor.createRequest(HttpAccessor.java:76) 在org.springframework。 web.client.RestTemplate.doExecute(RestTemplate.java:434) 在org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401) ..等。

(I」 m由於此主題將其鏈接到OAuth2ClientSecurityContextFilter:http://forum.springsource.org/showthread.php?98141-error-No-OAuth-2-security-context-has-been-established

So我的問題是:

  • 是否有意義有火的AuthenticationProvider後高達一些其他過濾器都玩過?
  • 如果是這樣,有可能控制過濾器的順序?
  • 或者有沒有辦法將UserDetails的計算延遲到後面的過濾器鏈中?

我知道這可能是一個非常特殊的情況,但我想知道如果我攻擊它正確的方式,或者如果我失去了一些東西。

在此先感謝。

+0

我有一個類似的應用程序,我可以使用OAuth2和AbstractAuthenticationProcessingFilter完成一個僞SSO解決方案。這裏的線程:http://forum.springsource.org/showthread.php?124587-Oauth2-client-for-single-sign-on-and-pre-authenticaion – headz68

回答

-2

解決方法是在右側添加一個過濾器。

+4

你能給我們更詳細的解決方案嗎?也許粘貼你的配置文件的一部分? –

相關問題