2017-06-20 2 views
0

Ich habe versucht, oauth für viele Stunden herauszufinden, so dass ich Produktanrufe in einer Desktop-App machen kann. Ich bin in der Lage, das Access-Token zu verwenden, das von der Entwicklerkonsole erzeugt wird, um http-Aufrufe mit restsharp zu machen, aber ich kann kein Put zum Arbeiten bekommen, um ein neues Zugriffs-Token zu erhalten, nachdem das alte abläuft, was eine Stunde ist. Ich habe auch versucht, fiddler zu verwenden, aber immer "HTTP 400 schlechte Anfrage" -Fehler bekommen.oAuth Refresh-Token Fiddler, C# Resteschärf Beispiel für Desktop-App

Channel Entwickler-Dokumentation: Link

Zugriffstoken aktualisiert

(Entschuldigen Sie meine Unwissenheit, nicht zu wissen, wie auch zu Aktualisierung der Zugriffstoken auf einer Seite zu springen.)

Ich kann das nicht in Restsharp arbeiten, nach Hunderten von Post und Foren auf oauth, Remainsharp Google Beispiele, alles. Der Versuch, eine andere Antwort als die http 400 oder invalid_client zu erhalten, ist ärgerlich. Das war es, was ein Post als Workaround bezeichnete, weil Restscharf automatisch magische Dinge zu dem Aufruf hinzufügte und dachte, dass es die klaren Parameter nutzen würde.

RestSharp-Code

string s = Convert.ToBase64String(Encoding.ASCII.GetBytes(creds.appID + ":" + creds.sharedSecret)); 

var client2 = new RestClient("https://api.channeladvisor.com/oauth2/token?grant_type=refresh_token&refresh_token=" + creds.refreshToken); 

var request2 = new RestRequest(); 
request2.Method = Method.POST; 
request2.Parameters.Clear();    
request2.AddHeader("Authorization", s); 
request2.AddHeader("Content-Type", " application/x-www-form-urlencoded"); 
request2.AddHeader("Cache-Control", "no-cache"); 

IRestResponse response2 = client2.Execute(request2); 

Also ging ich Fiddler und einfach über den Beispielcode in das Scratchpad eingefügt und hinzugefügt meine Tokens, ohne Erfolg.

POST /oauth2/token HTTP/1.1 
Host: api.channeladvisor.com 
Authorization: Basic MY_ENCODED_APPID:SHARED_SECRET 
Content-Type: application/x-www-form-urlencoded 
Cache-Control: no-cache 

grant_type=refresh_token&refresh_token=xxxxxxxxxxxxxxxxxxxxxmNZtF-cpLy44DV4DQ9Q 

Dies gibt auch 400 Fehler zurück. Die Soap-API war einfach mit Authentifizierung Benutzername, Passwort, aber ich brauche ein bisschen mehr Informationen, die Seife nicht bietet. Jede Hilfe wird geschätzt, vorzugsweise ein fiddler- oder restsharp-Beispiel, das das Kanal-Advisor-Aufrufformat verwendet.

+0

Sie müssen die refreshtoken Sachen setzen (grant_type = refresh_token & refresh_token =“+ creds.refreshToken) im Körper Ihrer Anfrage und es nicht als URL-Parameter hinzu. Außerdem finden Sie hier die fehlen "Basic" in Ihrem Authorization-Header – PtrBld

+0

@PtrBld führte mich in die richtige Richtung – zerodoc

Antwort

1

Was ich getan habe, um es zur Arbeit zu bringen.

string s = Convert.ToBase64String(Encoding.ASCII.GetBytes(creds.appID + ":" + creds.sharedSecret)); 

      var client2 = new RestClient("https://api.channeladvisor.com/oauth2/token"); 

      var request2 = new RestRequest(); 
      request2.Method = Method.POST; 
      request2.Parameters.Clear(); 
      request2.AddHeader("Authorization", "Basic " + s); 
      request2.AddHeader("Content-Type", " application/x-www-form-urlencoded"); 
      request2.AddHeader("Cache-Control", "no-cache"); 
      request2.AddParameter("grant_type", "refresh_token"); 
      request2.AddParameter("refresh_token", creds.refreshToken); 

      IRestResponse response2 = client2.Execute(request2);