2012-06-05 15 views
7

Tôi đang cố gắng nhận mã thông báo ủy quyền sử dụng luồng Mật khẩu-Tên người dùng (như được mô tả trong phần cuối cùng của this bài viết).Làm cách nào tôi có thể sử dụng dòng chảy grant_type = password oauth với salesforce.com?

tôi gửi các yêu cầu sau đây (sử dụng httplib Python, trong trường hợp có liên quan):

https://login.salesforce.com/services/oauth2/token 

POST data: 

username=<un>&client_secret=<consumer_secret>&password=<pw+token>&grant_type=password&client_id=<consumer_key> 

Và nhận được câu trả lời:

400 Bad Request 
{"error":"unsupported_grant_type","error_description":"grant type not supported"} 

Sản phẩm grant_type mật khẩu thực sự không được hỗ trợ, hoặc là Tôi thiếu cái gì? Dường như cung cấp cho lỗi này ngay cả khi tôi đang gửi một grant_type mà chắc chắn không hoạt động (chẳng hạn như authorized_code).

Lưu ý rằng tôi đã thử các đề xuất trong câu trả lời here và chúng không hoạt động đối với tôi.

+0

bạn có thể gửi mã của bạn và/hoặc chụp được yêu cầu http thực tế . – superfell

Trả lời

19

Thông thường điều này là do tiêu đề loại nội dung chưa được đặt thành giá trị chính xác, nó phải là application/x-www-form-urlencoded.

Cũng đảm bảo thông số của bạn được mã hóa chính xác (đặc biệt nếu bạn đang xây dựng trọng tải POST bằng tay).

+0

Cảm ơn bạn đã phản hồi nhanh. Tôi không thể tìm thấy bất kỳ đề cập nào về yêu cầu đó trong bài viết mà tôi đang theo dõi ... – Symmetric

6

Dưới đây là chi tiết chức năng/logic về cách sử dụng grant_type = mật khẩu dòng oauth với salesforce.com trong JAVA:

// Authenticate via OAuth 
    JSONObject response = oauthLogin(); 
    System.out.println("Login response: " + response.toString(2)); 
    if (!response.has("access_token")) { 
     throw new Exception("OAuth failed: " + response.toString()); 
    } 

    .......................... 


    private static JSONObject oauthLogin() throws Exception { 

    org.eclipse.jetty.client.HttpClient jettyHttpClient = new org.eclipse.jetty.client.HttpClient(); 
    jettyHttpClient.start(); 

    String url = LOGIN_SERVER + "/services/oauth2/token"; 

    ContentExchange exchange = new ContentExchange(); 
    exchange.setMethod("POST"); 
    exchange.setURL(url); 

    String message = "grant_type=password&client_id=" + CLIENT_ID 
      + "&client_secret=" + CLIENT_SECRET + "&username=" + USERNAME 
      + "&password=" + PASSWORD; 

    exchange.setRequestHeader("Content-Type", 
      "application/x-www-form-urlencoded"); 
    exchange.setRequestContentSource(new ByteArrayInputStream(message 
      .getBytes("UTF-8"))); 

    jettyHttpClient.send(exchange); 
    exchange.waitForDone(); 

    return new JSONObject(new JSONTokener(exchange.getResponseContent())); 
} 
+0

HI Chirag, tôi đã cố gắng khi bạn viết đoạn mã trên, Tôi vẫn gặp sự cố bên dưới Phản hồi đăng nhập: { "lỗi": "invalid_grant ", " error_description ":" lỗi xác thực " } Tôi đã sử dụng thông tin xác thực chính xác, mặc dù tôi nhận được, vui lòng cho tôi biết nếu bạn có thể hướng dẫn về điều này. – Ashish

0

Bạn phải thiết lập các grant_type như "password" trong dữ liệu mẫu. Xem bên dưới.

Các dữ liệu mẫu nên được thông qua quảng cáo grant_type = mật khẩu & username = nilavghosh% 40gmail.com & password = ******

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