2016-04-10 14 views
0

Ich versuche, den Autorisierungscode für ein Zugriffs-Token auszutauschen. Ich bin mit dem HttpClient in ASP.NET, um eine Post-Anforderung zu machen:Ungültige grant_type youtube api

var clientId = "clientid"; 
var redirectUri = "http://localhost:65148/Welcome"; 
var clientSecret = "clientsecret"; 

if (code != null) 
{ 
    //Lets exchange the code for a access token 
    using (var client = new HttpClient()) 
    { 
     var values = new Dictionary<string, string> 
     { 
      { "code", code }, 
      { "client_id", clientId }, 
      { "client_secret", clientSecret }, 
      { "redirect_uri", redirectUri }, 
      { "grant_type", code } 
     }; 


     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded")); 
     var content = new FormUrlEncodedContent(values); 
     var response = await client.PostAsync("https://accounts.google.com/o/oauth2/token", content); 
     var responseString = await response.Content.ReadAsStringAsync(); 
     var value = Json(new { data = responseString }); 
     return value; 
    } 

} 

Aber wenn ich diese laufen, erhalte ich eine Fehlermeldung:

{ 
    "error" : "invalid_request", 
    "error_description" : "Invalid grant_type:4/AlxtyFqHeOiTC32THJgipkUWtHBO27GqFfgOoOCG9wE" 
} 

Ich weiß nicht, warum ich Ich bekomme das. Wer kann mir helfen?

+0

Was ist der Wert der Codevariablen? (das entspricht Ihrem Parameter 'grant_type', der normalerweise auf 'password' gesetzt ist) – user1821052

+0

@ user1821052: Überprüfen Sie meine Fehlermeldung. Nach grant_type: Sie haben den Code. – Bryan

+0

ok Ich sehe - sieht so aus, als würden Sie den Variablencode sowohl auf "code" als auch auf "grant_type" setzen. Versuchen Sie, "grant_type" auf die Zeichenfolge "password" zu setzen. – user1821052

Antwort

0

In der von Ihnen angegebenen Verbindung ist der grant_type auf authorization_code eingestellt. Ich kann sehen, dass dies verwirrend ist (vielleicht sollte es der Wert des Codes sein?), Aber später im Beispiel ist geklärt, um ein String-Literal von 'Authorization_code' zu sein.

A sample request is displayed below: 

POST /o/oauth2/token HTTP/1.1 
Host: accounts.google.com 
Content-Type: application/x-www-form-urlencoded 

code=4/ux5gNj-_mIu4DOD_gNZdjX9EtOFf& 
client_id=1084945748469-eg34imk572gdhu83gj5p0an9fut6urp5.apps.googleusercontent.com& 
client_secret=hDBmMRhz7eJRsM9Z2q1oFBSe& 
redirect_uri=http://localhost/oauth2callback& 
**grant_type=authorization_code** 

Vielleicht noch interessanter ist, ist die grant_type ein Standard für OAuth 2.0 und gezwungen ist, auf bestimmte Werte je nach Szenario. Ihr Szenario Autorisierungscode zu gewähren, wird in diesem Abschnitt der Spezifikation beschrieben: https://tools.ietf.org/html/rfc6749#section-4.1

Vom doc:

grant_type ERFORDERLICH. Wert muss auf "authorization_code" eingestellt sein.