Spring Security Oauth2 使用 token 訪問資源服務器出現異常:Invalid token does not contain resource id (oauth2)


異常如圖

查看資源服務器的日志

p.a.OAuth2AuthenticationProcessingFilter : Authentication request failed: error="access_denied", error_description="Invalid token does not contain resource id (oauth2)"

從上面的日志可以看出,異常日志輸出的 class 是 OAuth2AuthenticationProcessingFilter 這個過濾器

對 OAuth2AuthenticationProcessingFilter 過濾器進行 debug 調試

可以看到上圖中,斷點已經進入到了 doFilter 過濾器的過濾和放行的方法中

繼續打斷點,發現這個方法里面在使用認證管理器的認證時,拋出了異常

再進行一次 debug 訪問,我們看一下這個方法內部是怎么操作的,可以看到這個 AuthenticationManager 是一個接口,而對於的在這個地方調用 authenticate 的實現類是:OAuth2AuthenticationManager

進入這個方法以后,一直往下走,發現資源服務器對我們傳入的 token 與授權服務器進行了一次遠程認證,認證完以后,這個 token 是存在的,然后在這里他獲取了一下訪問授權服務器的資源服務器 id,而在這里出現了問題,當前資源服務器的 resourceId 為 oauth2,從授權服務器那邊獲取到的 resourceId 則是 resource,這樣就可以知道,在我們資源服務器端是沒有問題的,去查找一下授權服務器的問題

可以在授權服務器上面看到,咱們配置的資源服務器 id,均是配置在數據庫的

查詢一下數據庫以后,發現 resourceId 的配置與資源服務器上面的不符,這樣就導致了剛才的錯誤

解決方法,修改 resouce_ids 與資源服務器上面配置一致即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM