2011-11-01 35 views
5

Lớp điều khiển của tôi được bọc bằng oauth2 mùa xuân. Tôi đang viết một bài kiểm tra tích hợp để kiểm tra các cuộc gọi api đến bộ điều khiển, vì vậy tôi quyết định sử dụng RestTemplate.Mẫu khôi phục mùa xuân với OAUTH

Sau đây là lệnh tôi sử dụng qua curl:

curl -v --cookie cookies.txt --cookie-jar cookies.txt "http://localhost:8080/oauth/token?client_id=my-trusted-client&grant_type=password&scope=trust&username=xxxx&password=xxxxxx" 

này trả về một access token mà tôi sử dụng để thực hiện cuộc gọi đến các api:

curl -v -H "Authorization: Bearer Access toekn value" "http://localhost:8080/profile/1.json" 

Trong khi sử dụng RestTemplate, tôi đã có thể nhận mã thông báo truy cập, nhưng bây giờ tôi muốn chuyển mã thông báo này để thực hiện các cuộc gọi api:

DefaultHttpClient client = new DefaultHttpClient(); 
    HttpHeaders headers = new HttpHeaders(); 
    headers.set("Authorization: Bearer", accessToken); 
    System.out.println(accessToken); 
    HttpEntity<String> entity = new HttpEntity<String>(headers); 
    System.out.println(restTemplate.exchange("http://localhost:8080/xxxx",HttpMethod.GET,entity,Object.class)); 

Tuy nhiên, tôi gặp lỗi này:

Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 401 Unauthorized 
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:75) 
at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:486) 
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:443) 
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401) 
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:377) 
at com.gogii.service.SKUService.testGetAllSKU(SKUService.java:20) 

Làm cách nào để thực hiện cuộc gọi được xác thực bằng RestTemplate?

+0

Vì vậy, bạn có đang chuyển "accessToken" với mỗi REQUEST đến máy chủ hay không. Vì vậy, tôi giả sử REST API của bạn là không trạng thái và bạn giữ trạng thái không trạng thái của nó bằng cách gửi accessToken mọi lúc. Đây có phải là giải pháp an toàn không? Bạn đang sử dụng nó trong một môi trường sản xuất? – jsf

Trả lời

9

tôi đã thiết lập thông số sai trong tiêu đề .. nó phải được

headers.set("Authorization","Bearer "+accessToken); 
+0

Làm thế nào để bạn nhận được mã thông báo truy cập từ yêu cầu? Trường acessTOken của bạn được đặt ở đâu? – user3629892

1

này đang làm việc cho tôi, cho OAuth2 API.

HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_JSON); 
headers.set("Authorization","Bearer "+"ACCESS-TOKEN"); 

ký tự khoảng trắng quan trọng khi thiết lập Ủy quyền.

Các vấn đề liên quan