2013-07-09 31 views
22

tôi có thể thiết lập các Auth header trên HTTPURLConnection yêu cầu bình thường như thế này:Làm thế nào để thiết lập (OAuth token) Authorization header trên một yêu cầu Android OKHTTPClient

URL url = new URL(source); 
HttpURLConnection connection = this.client.open(url); 
connection.setRequestMethod("GET"); 
connection.setRequestProperty("Authorization", "Bearer " + token); 

Đây là tiêu chuẩn cho HttpURLConnection. Trong đoạn mã trên this.client là một phiên bản của Square OkHTTPClient (here).

Tôi tự hỏi liệu có một cách riêng biệt để đặt tiêu đề xác thực là OkHTTP không? Tôi thấy lớp OkAuthenticator nhưng không rõ ràng về cách sử dụng chính xác nó/có vẻ như nó chỉ xử lý các thách thức xác thực.

Cảm ơn trước cho bất kỳ con trỏ nào.

+0

Hi, sao bạn giải quyết? – CeccoCQ

Trả lời

17

Nếu bạn sử dụng phiên bản hiện tại (2.0.0), bạn có thể thêm một tiêu đề để yêu cầu:

Request request = new Request.Builder() 
      .url("https://api.yourapi...") 
      .header("ApiKey", "xxxxxxxx") 
      .build(); 

Thay vì sử dụng:

connection.setRequestMethod("GET");  
connection.setRequestProperty("ApiKey", "xxxxxxxx"); 

Tuy nhiên, đối với các phiên bản cũ (1.x), tôi nghĩ việc triển khai bạn sử dụng là cách duy nhất để đạt được điều đó. Như their changelog đề cập:

Version 2.0.0-RC1 2014-05-23

request và response mới các loại, mỗi người xây dựng riêng của họ. Ngoài ra còn có một lớp RequestBody để viết phần thân yêu cầu vào mạng và một ResponseBody để đọc nội dung phản hồi từ mạng. Lớp Tiêu đề độc lập cung cấp quyền truy cập đầy đủ vào các tiêu đề HTTP.

-1

https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/com/squareup/okhttp/recipes/Authenticate.java

client.setAuthenticator(new Authenticator() { 
    @Override public Request authenticate(Proxy proxy, Response response) { 
    System.out.println("Authenticating for response: " + response); 
    System.out.println("Challenges: " + response.challenges()); 
    String credential = Credentials.basic("jesse", "password1"); 
    return response.request().newBuilder() 
     .header("Authorization", credential) 
     .build(); 
    } 

    @Override public Request authenticateProxy(Proxy proxy, Response response) { 
    return null; // Null indicates no attempt to authenticate. 
    } 
}); 
+1

Điều này là sai. Nó thêm xác thực BASIC chứ không phải mã thông báo OAuth – checklist

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