Spring Boot,Security OAuth2實現,默認令牌端點(/ oauht/token)工作正常。然而,當我在發送/ OAuth的/ HTTP /新端點請求令牌它拋出,因爲以下原因不正確的憑據:Spring安全客戶端詳細信息將作爲DaoAuthenticationProvider中的用戶詳細信息
FilterChainProxy
觸發約12過濾器和出其中一個是BasicAuthenticationFilter
。它使用DaoAuthenticationProvider
類的UserDetailsService
來獲取用戶數據。對於客戶端身份驗證,這應該是ClientDetailsService
,但由於某些原因,這總是UserDetailsService
,並且由於此客戶端憑據轉到UserRepository
而失敗。此課程正確初始化,因爲默認/oauth/token
工作正常。
我試圖注入現有的認證管理器BasicAuthenticationFilter
,並補充說,作爲ResourceServerConfigurerAdapter
過濾器,但沒有任何區別。它確實將身份驗證管理器提供程序從AnonymousAuthenticationProvider
更改爲DaoAuthenticationProvider
,但UserDetailsService
仍然保留爲UserDetails
。
請求/oauth/http/token
,這是行不通的。代碼幾乎相同postAccessToken()
的org.springframework.security.oauth2.provider.endpoint.TokenEndpoint
在上面的截圖我們可以看到的UserDetailsService是UserDetailsServiceImpl並且由於該客戶機的信息呈現請求頭作爲Basic dGVzdDpwYXNzd29yZA==
是要用戶庫和在用戶表檢查代替轉到客戶端存儲庫並在客戶端桌面進行檢查。
請求在/oauth/token
,這個工程
感謝您的回覆。在檢查你的響應之後,我添加了'http.userDetailsService(clientDetailsUserDetailsService);'並且這個客戶端表正在被搜索,但正在進行認證的'BasicAuthenticationFilter'使用'PlaintextPasswordEncoder'而不是'DaoAuthenticationProvider'中定義的密碼編碼器。我添加了自定義'BasicAuthenticationFilter'自定義身份驗證管理器,但與此用戶表搜索客戶端ID。無論如何,我可以複製Spring oauth創建的default/oauth/token嗎? –
除'pathMapping()',是否有任何代碼,我可以重寫和添加幾個URL將使用EXACT相同的過濾器鏈正在使用/ outh /令牌 –
我不知道你想要或應該(不)但是你可以使用'AuthorizationServerSecurityConfigurer#addTokenEndpointAuthenticationFilter'在oauth鏈中添加額外的過濾器。過濾器鏈通過'WebSecurityConfigurerAdapter'進行管理,OAuth來自'@ EnableAuthorizationServer'。所有有效的配置都由作者通過'AuthorizationServerConfigurerAdapter'類公開。 –