我有兩個資源服務器:一個具有用於通知電子郵件的API和一個運行計劃任務的API。計劃任務開始時,我想呼叫電子郵件服務以通知用戶其任務正在啓動。這兩個服務都使用OAuth2進行身份驗證。計劃任務的服務客戶端憑證設置,以便它可以通過提出它獲得訪問令牌的客戶端憑證: 如何在計劃任務中使用OAuth2RestTemplate?
要做到這一點,我使用Spring啓動使用Spring Security OAuth2用戶。任務服務有一個OAuth2RestTemplate來呼叫電子郵件服務。當計劃任務啓動並嘗試使用OAuth2RestTemplate時,它會嘗試獲取OAuth2ClientContext作爲sesson範圍的bean。顯然,它不會找到一個,因爲我沒有在請求線程中執行,我在後臺任務線程中運行。我得到這個異常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'scopedTarget.oauth2ClientContext': Scope 'session' is not active for the current thread;
consider defining a scoped proxy for this bean if you intend to refer to it
from a singleton
由於我使用的系統到系統驗證靜態客戶端證書,我沒有看到一個很好的理由來使用會話作用域的數據來處理我的訪問令牌。我更喜歡有一個單獨的OAuth2ClientContext bean,任何線程都可以使用它來通過OAuth2RestTemplate發出請求。
我該如何配置?
我需要做類似的事情 - Quartz調度程序需要調用將訪問受OAuth2保護的REST服務的作業。我無法使用基於用戶名/密碼的OAuth2流,但使用基於客戶端ID的流。你能分享你的代碼嗎?還是幫忙? – sunitkatkar