2012-06-05 7 views
7

मैं उपयोगकर्ता नाम-पासवर्ड प्रवाह का उपयोग करके एक प्राधिकरण टोकन प्राप्त करने का प्रयास कर रहा हूं (जैसा कि this आलेख के अंतिम खंड में वर्णित है)।salesforce.com के साथ grant_type = पासवर्ड oauth प्रवाह का उपयोग कैसे कर सकता हूं?

मैं निम्नलिखित अनुरोध (पायथन के httplib का उपयोग कर, मामले में है कि प्रासंगिक है) भेज रहा:

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> 

और प्रतिक्रिया हो रही है:

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

है पासवर्ड grant_type वास्तव में असमर्थित, या कर रहा हूँ मुझे कुछ याद आ रहा है? ऐसा लगता है कि जब भी मैं एक अनुदान_टाइप भेज रहा हूं जो निश्चित रूप से काम करता है (जैसे authorization_code)।

ध्यान दें कि मैंने here उत्तर में सुझावों का प्रयास किया है, और वे मेरे लिए काम नहीं करते हैं।

+0

आप अपने कोड और/या वास्तविक http अनुरोध की एक कब्जा पोस्ट कर सकते हैं । – superfell

उत्तर

19

आमतौर पर ऐसा इसलिए है क्योंकि सामग्री-प्रकार शीर्षलेख सही मान पर सेट नहीं किया गया है, यह application/x-www-form-urlencoded होना चाहिए।

यह भी सुनिश्चित करें कि आपके पैरामीटर सही ढंग से एन्कोड किए गए हैं (विशेष रूप से यदि आप हाथ से पोस्ट पेलोड बना रहे हैं)।

// 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

त्वरित प्रतिक्रिया के लिए धन्यवाद। मुझे उस आलेख में उस आवश्यकता का कोई उल्लेख नहीं मिला जो मैं पीछा कर रहा था ... – Symmetric

6

नीचे कैसे जावा में salesforce.com साथ grant_type = पासवर्ड OAuth प्रवाह का उपयोग करने के बारे में विस्तृत समारोह/तर्क है। निचे देखो।

प्रपत्र डेटा विज्ञापन grant_type = पासवर्ड & उपयोगकर्ता नाम = nilavghosh% 40gmail.com & पासवर्ड = ****** पारित किया जाना चाहिए

+0

HI चिराग, मैंने ऊपर कोड कोड स्निपेट के रूप में कोशिश की, फिर भी मुझे समस्या से नीचे आ रहा है लॉगिन प्रतिक्रिया: { "त्रुटि": "अवैध_ग्रांत ", " error_description ":" प्रमाणीकरण विफलता " } मैंने सही प्रमाण पत्र का उपयोग किया है, भले ही मुझे मिला, कृपया मुझे बताएं, अगर आप इस पर मार्गदर्शन कर सकते हैं। – Ashish

0

आप "पासवर्ड" फ़ॉर्म डेटा के रूप में grant_type सेट करना होगा:

संबंधित मुद्दे