我正在使用Zuul作爲將請求路由到我的微服務的反向代理。我還啓用了此反向代理上的資源服務器(@EnableResourceServer),以便對我的授權服務器授權請求。沒有資源服務器的配置,只有一些繞過安全的幾個請求,僅此而已。此反向代理在將請求路由到其他微服務時也簡單地傳遞OAuth2頭,以便其他微服務能夠根據需要執行所有與安全有關的事情。一切都很完美......但是。Spring Cloud - 如何在Zuul反向代理上配置OAuth2RestTemplate以傳遞授權令牌?
我創建的一個zuul過濾器是用於資源擴展的過濾器。這意味着它會根據提供的url參數自動獲取所有相關資源(例如,對於員工資源,url參數可以是「expand = manager,contacts」,它使用員工資源上的HAL鏈接獲取所有這些額外數據,並將額外數據添加到JSON中的嵌入字段)。
我遇到的問題是,當我正在做這個擴展時,我需要使用RestTemplate來進行擴展(以獲取所有應該嵌入的數據)。我無法弄清楚如何配置OAuth2RestTemplate,以便將OAuth2授權頭添加到傳出的請求中。 我試圖從這個春天的雲文檔:
@Bean
public OAuth2RestTemplate restTemplate(UserInfoRestTemplateFactory factory) {
return factory.getUserInfoRestTemplate();
}
但我從OAuth2TokenRelayFilter一些空指針異常。有此過濾器htat看起來像這裏面的條件:
restTemplate.getResource().getClientId()
.equals(auth.getOAuth2Request().getClientId())
但restTemplate.getResource()返回null,也getClientId()上OAuth2Request實例返回null ...看來我真的失去了一些東西。
引入的OAuth2 RestTemplate的設置之前:
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
所以你看到的負載平衡,還需要(使用負載均衡功能區,尤里卡用於那些基於一個服務別名服務發現,所以沒有直接網址在ZUUL配置)
任何建議顯示設置它?
感謝, 盧卡斯
據我所知OAuth2RestTemplate會嘗試從OAuth2用戶服務器,而不是通過現有令牌到你的員工資源的新令牌。嘗試提供只會通過現有令牌的自定義令牌提供程序。 – tsolakp
@tsolakp但我沒有在此代理上配置OAuth2客戶端,因此它不知道clientId和clientSecret。所以實際上這可能是問題。不過,我從春季雲文檔章節(關於令牌中繼)的一篇中瞭解到,它僅適用於資源服務器,並且不需要OAuth2客戶端。 –