2016-01-18 32 views
5

Caspio API'u tüketen bir uygulama yapıyorum. API'larına karşı kimlik doğrulaması konusunda sorun yaşıyorum. Bunu anlamaya çalışırken 2-3 gün harcadım ama bu benim sonumdaki bazı anlayışlardan kaynaklanıyor olabilir. Stackoverflow yazısında sayısız makale okudum ve aksi halde sorunu çözmedim. Aşağıda, neye baktığımı temel alan çözümümün bir kod örneği ve 400 Durum kodu mesajı alıyorum; Burada neyi yanlış yapıyorum? (Iyi yorumladı kod örneği sağlamak ve ben tercih edeceğini Lütfen bağlantılar burada yayınlanan ben bu yoğun teşekkürler baktım gibi diğer malzemeyi başvuran var DEĞİL.!):Temel Kimlik Denetimi JavaScript'i Kullanma

1:

Bazı referanslar i baktım) Pure JavaScript code for HTTP Basic Authentication?

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

aşağıdaki Caspio tarafından tarif edildiği gibi, bu kimlik doğrulama yöntemini kullanmak isteyen:

İstek gövdesinde kimlik bilgilerini dahil etmenin bir alternatifi olarak, bir istemci HTTP Temel kimlik doğrulama şemasını kullanabilir.

Yöntem: SONRASI

URL: Simgeniz uç nokta

Gövde: grant_type = Bu durumda, kimlik doğrulama isteği şu şekilde kurulum olacak client_credentials

Başlık parametresi:

Yetki: Aşağıda

benim JavaScript ve HTML kodu vardır Temel Temel kimlik doğrulaması bölge.

JavaScript:

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: Bu bakarak zaman biraz Harcama sonra ben bunun için çözüm geldi

<div> 
<div id="response"> 

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

cevap

6

; Bu çözümde Temel kimlik doğrulamayı kullanmıyorum, ancak oAuth kimlik doğrulama protokolü ile devam ettim. Ancak, Temel kimlik doğrulamasını kullanmak için, bu kodu "setHeaderRequest" içinde kod örneğinin geri kalanında en az değişiklikle belirtmeniz gerekir.Bu ileride başkası yardımcı olacağını umuyoruz: Bazı istek üzerine Caspio DİNLENME API kullanıyorsanız

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); 

o size bitiş noktasına belirli istek için parametrelerinin kodlamak için zorunludur olabilir; bu konudaki Caspio belgelerine bakın;

NOT: encodedParams bu örnekte kullanılmaz, ancak özümde kullanıldı. Şimdi belirteci uç noktadan saklanan koduna sahip olmanız

başarıyla

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

     } 
    } 
} 

Bu çözüm yalnızca başarıyla nasıl yapmak düşünüyor mu uygulamanız için Caspio kaynak uç noktadan sonraki isteği kimlik doğrulaması gerekir Saf javascript'te Caspio API'yi kullanarak kimliği doğrulanmış istek. Eminim birçok kusur var eminim ...

-3

EncodedParams değişkeni params değişkeni çalışmadığı için yeniden tanımlandı. Değişkenle aynı önceden tanımlanmış çağrıya sahip olmanız gerekir, aksi takdirde biraz daha fazla çalışma ile mümkün görünüyor. Şerefe! json php'deki tüm yeteneklerine alışkın değil, şu anda hatırlamadığım jsonu aramanın daha iyi yolları var.

İlgili konular