0

我有一個授權服務器需要訪問受保護資源(在單獨的資源服務器上)需要訪問的用戶相關信息的場景。要訪問此受保護資源,需要訪問令牌。我通過TokenGranter手動生成了該令牌,並將其添加到Rest Template所做請求的頭部。當資源被訪問時,它使用授權服務器驗證令牌。從授權服務器訪問受保護資源

我的問題是,即使在數據庫中存在訪問令牌,但當我嘗試訪問資源時,我不斷獲取訪問權限。

我在做錯在訪問資源?如何從授權服務器訪問受保護的資源?

下面是授權其他控制器用來請求資源的代碼:

private final OAuth2TokenGranter tg; 
TokenRequest tr = new TokenRequest(reqparams, clientId, scope, grantType); 

OAuth2AccessToken grantToken = tg.grant("bearer", tr); 

String token = "Bearer " + grantToken.getValue(); 

RestTemplate restTemplate = new RestTemplate(); 
HttpHeaders headers = new HttpHeaders(); 
headers.set("Authorization", token); 
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); 

HttpEntity<String> entity = new HttpEntity<String>(headers); 
restTemplate.exchange(url, HttpMethod.GET, entity, PagedResources.class, authentication.getName()); 

回答

0

很多東西可能是錯誤的。首先,檢查資源服務器需要訪問令牌的內容 - 它需要的範圍等。確保使用正確的範圍生成訪問令牌。你還提到你需要一個訪問令牌來訪問用戶資源。我對您使用的OAuth2TokenGranter不熟悉,但請檢查生成的訪問令牌是否鏈接到用戶授權。您的令牌生成器可能已生成訪問令牌,但如果它未鏈接到用戶授權,則授權服務器將以不完整的信息回覆資源服務器的查詢 - 導致資源服務器拒絕您的請求訪問。

相關問題