2016-07-25 21 views
1

Ich versuche ein Token vom ArcGIS Online-Dienst mithilfe eines Javascript zu erhalten. Es gibt jedoch immer einen Fehler zurück, der angibt, dass die Client-ID nicht angegeben ist.JSON gibt immer "client_id not specified" zurück

Mache ich hier alles richtig?

<script type="text/javascript"> 
    var MyJSONText = '{"client_id":"<<MY_CLIENT_ID>>","client_secret":"<<MY_CLIENT_SECRET>>","grant_type":"client_credentials","expiration":"1440","f":"json"}'; 
    var MyJSON = JSON.parse(MyJSONText); 
    xhr = new XMLHttpRequest(); 
    xhr.open("POST", "https://www.arcgis.com/sharing/rest/oauth2/token/"); 
    xhr.send(MyJSON); 
    xhr.onreadystatechange = function() 
    { 
     if (xhr.readyState == 4 && xhr.status == 200) 
     { 
      alert(xhr.responseText); 
     } 
    } 

</script> 

Bearbeiten - voller Fehler ist:

{"error":{"code":400,"error":"invalid_request","error_description":"client_id not specified","message":"client_id not specified","details":[]}} 

Antwort

1

konnte ich ein Zugriffstoken mit application/x-www-form-urlencoded Anfrage abzurufen:

POST https://www.arcgis.com/sharing/rest/oauth2/token HTTP/1.1 
User-Agent: Fiddler 
Content-Type: application/x-www-form-urlencoded 
Host: www.arcgis.com 
Content-Length: 126 

client_id=<YOUR ID>&client_secret=<YOUR SECRET>&grant_type=client_credentials&expiration=1440&f=json 

was bedeutet, dass Sie die Content- angeben können müssen Geben Sie den Anforderungsheader ein, wenn Sie die XHR-Anforderung ausführen:

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 

und natürlich richtig formatieren den Körper als application/x-www-form-urlencoded anstelle von JSON. In meinen Tests funktionierte dieser Endpunkt nicht mit JSON-Nutzdaten.

Leider, wie es aussieht, unterstützt der Token-Endpunkt nicht das Setzen der Content-Type Anfrage-Header in seiner CORS-Richtlinie, was bedeutet, dass Sie Pech haben, wenn Sie es mit Javascript aufrufen. Neben erwähnt nichts über javascript als eine unterstützte Sprache.

Also im Grunde, wenn Sie diese Arbeit machen möchten, könnten Sie das Access-Token auf Ihrer Server-Seite erhalten und es an den Client weitergeben.

+0

Das bringt ein 'Request-Header-Feld zurück Content-Type ist nicht erlaubt von Access-Control-Erlaube-Header in Preflight-Response.' in der console.log. – user25730

+0

Es tut uns leid, immer noch mit dem Fehler "client_id not specified" zurückkommen. – user25730

+0

Ja, immer noch denselben Fehler. Danke trotzdem - wird es als Antwort markieren. Sieht so aus, als müsste ich neu überdenken, welche Methode ich verwende und wie node.js verwendet wird – user25730