2016-01-18 5 views
5

का उपयोग कर मूल प्रमाणीकरण मैं Caspio API का उपभोग करने वाले एक एप्लिकेशन का निर्माण कर रहा हूं। मुझे उनके एपीआई के खिलाफ प्रमाणीकरण में कुछ परेशानी हो रही है। मैंने इसे समझने की कोशिश करने में 2-3 दिन बिताए हैं लेकिन यह मेरे अंत में कुछ समझ के कारण हो सकता है। मैंने स्टैक ओवरफ्लो पोस्ट पर अनगिनत लेख पढ़े हैं और अन्यथा लेकिन इस मुद्दे को हल नहीं किया है। मैंने जो देखा है उसके आधार पर नीचे मेरे समाधान का एक कोड उदाहरण है और मुझे 400 स्टेटस कोड संदेश मिल रहा है; मुझसे यहां क्या गलत हो रहा है? (अच्छी तरह से टिप्पणी की कोड उदाहरण प्रदान करते हैं और मैं पसंद करेंगे कृपया नहीं है लिंक यहां पोस्ट अन्य सामग्री को संदर्भित के रूप में मैं इन बड़े पैमाने पर धन्यवाद ध्यान दिया है।!):जावास्क्रिप्ट

1:

कुछ संदर्भों मैं पर ध्यान दिया है) Pure JavaScript code for HTTP Basic Authentication?

2) How to make http authentication in REST API call from javascript

मैं नीचे के रूप में caspio द्वारा वर्णित इस प्रमाणीकरण विधि का उपयोग करना चाहेंगे:

अनुरोध निकाय में प्रमाण पत्र शामिल करने के विकल्प के रूप में, ग्राहक HTTP मूल प्रमाणीकरण योजना का उपयोग कर सकता है।

विधि:: पोस्ट

यूआरएल: आपका टोकन endpoint

बॉडी: grant_type = इस मामले में, प्रमाणीकरण अनुरोध निम्नलिखित तरीके से सेटअप किया जाएगा client_credentials

हैडर पैरामीटर:

प्राधिकरण: बेसिक मूल प्रमाणीकरण दायरे

नीचे मेरी जावास्क्रिप्ट और HTML कोड है।

जावास्क्रिप्ट:

var userName = "clientID"; 
var passWord = "secretKey"; 

function authenticateUser(user, password) 
{ 
    var token = user + ":" + password; 

    // Should i be encoding this value????? does it matter??? 
    // Base64 Encoding -> btoa 
    var hash = btoa(token); 

    return "Basic " + hash; 
} 

function CallWebAPI() { 

    // New XMLHTTPRequest 
    var request = new XMLHttpRequest(); 
    request.open("POST", "https://xxx123.caspio.com/oauth/token", false); 
    request.setRequestHeader("Authorization", authenticateUser(userName, passWord)); 
    request.send(); 
    // view request status 
    alert(request.status); 
    response.innerHTML = request.responseText; 
} 

HTML:

<div> 
<div id="response"> 

</div> 
<input type="button" class="btn btn-primary" value="Call Web API" onclick="javascript:CallWebAPI();" /> 

उत्तर

6

इस में देख समय की काफ़ी खर्च करने के बाद, मैं इस के लिए समाधान के साथ आया था; इस समाधान में मैं मूल प्रमाणीकरण का उपयोग नहीं कर रहा हूं बल्कि इसके बजाय ओथ प्रमाणीकरण प्रोटोकॉल के साथ चला गया। लेकिन मूल प्रमाणीकरण का उपयोग करने के लिए आपको शेष कोड उदाहरण में न्यूनतम परिवर्तन के साथ "setHeaderRequest" में निर्दिष्ट करने में सक्षम होना चाहिए।मुझे आशा है कि यह भविष्य में किसी और मदद करने में सक्षम हो जाएगा:

var token_ // variable will store the token 
var userName = "clientID"; // app clientID 
var passWord = "secretKey"; // app clientSecret 
var caspioTokenUrl = "https://xxx123.caspio.com/oauth/token"; // Your application token endpoint 
var request = new XMLHttpRequest(); 

function getToken(url, clientID, clientSecret) { 
    var key;   
    request.open("POST", url, true); 
    request.setRequestHeader("Content-type", "application/json"); 
    request.send("grant_type=client_credentials&client_id="+clientID+"&"+"client_secret="+clientSecret); // specify the credentials to receive the token on request 
    request.onreadystatechange = function() { 
     if (request.readyState == request.DONE) { 
      var response = request.responseText; 
      var obj = JSON.parse(response); 
      key = obj.access_token; //store the value of the accesstoken 
      token_ = key; // store token in your global variable "token_" or you could simply return the value of the access token from the function 
     } 
    } 
} 
// Get the token 
getToken(caspioTokenUrl, userName, passWord); 

आप कुछ अनुरोध पर Caspio REST API का उपयोग कर रहे हैं यह जरूरी है कि आप अपने अंत बिंदु करने के लिए कुछ अनुरोध के लिए paramaters एन्कोड करने के लिए हो सकता है; इस मुद्दे पर कैस्पियो दस्तावेज देखें;

नोट: इस उदाहरण में एन्कोडेड पैराम का उपयोग नहीं किया जाता है लेकिन मेरे समाधान में उपयोग किया जाता था।

अब आप टोकन समाप्ति बिंदु से संग्रहीत टोकन है कि आप को सफलतापूर्वक अपने आवेदन

function CallWebAPI() { 
    var request_ = new XMLHttpRequest();   
    var encodedParams = encodeURIComponent(params); 
    request_.open("GET", "https://xxx123.caspio.com/rest/v1/tables/", true); 
    request_.setRequestHeader("Authorization", "Bearer "+ token_); 
    request_.send(); 
    request_.onreadystatechange = function() { 
     if (request_.readyState == 4 && request_.readyState == 200) { 
      var response = request_.responseText; 
      var obj = JSON.parse(response); 
      // handle data as needed... 

     } 
    } 
} 

यह समाधान केवल सफलतापूर्वक बनाने के लिए समझता है के लिए caspio संसाधन समाप्ति बिंदु से बाद के अनुरोध के लिए प्रमाणित करने के लिए सक्षम होना चाहिए शुद्ध जावास्क्रिप्ट में Caspio API का उपयोग कर प्रमाणीकृत अनुरोध। अभी भी कई त्रुटियां हैं जो मुझे यकीन है ...

-3

एनकोडेड पैराम्स वैरिएबल को फिर से परिभाषित किया गया है क्योंकि पैराम वैरिएबल काम नहीं करेगा। आपको वैरिएबल के लिए एक पूर्वनिर्धारित कॉल होना चाहिए, अन्यथा यह थोड़ा और काम के साथ संभव दिखता है। चीयर्स! जेसन का उपयोग php में इसकी पूर्ण क्षमताओं के लिए नहीं किया जाता है, जेसन को कॉल करने के बेहतर तरीके हैं जिन्हें मैं इस समय याद नहीं करता हूं।

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