我正在尝试按照本教程的步骤从Google Api获取身份验证令牌:https://developers.google.com/identity/protocols/OAuth2WebServer#exchange-authorization-code
我正在向api发送一个http post请求,如上面教程的第5步所述。 跟着我的代码:
List<KeyValuePair<string, string>> postData = new List<KeyValuePair<string, string>>();
postData.Add(new KeyValuePair<string, string>("code", code));
postData.Add(new KeyValuePair<string, string>("client_id", "XXX"));
postData.Add(new KeyValuePair<string, string>("client_secret", "XXX"));
postData.Add(new KeyValuePair<string, string>("redirect_uri", "XXX"));
postData.Add(new KeyValuePair<string, string>("grant_type", "authorization_code"));
using (var httpClient = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Add("Contenttype", "application/x-www-form-urlencoded");
using (var content = new FormUrlEncodedContent(postData))
{
content.Headers.Clear();
content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
HttpResponseMessage response = await httpClient.PostAsync("https://www.googleapis.com/oauth2/v4/token", content);
//var response = (await client.PostAsync(gh, content));//encodedContent));
if (response.IsSuccessStatusCode)
{
string res = await response.Content.ReadAsStringAsync();
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(res);
}
}
}
它将给我一个401&#39; Unauthorized&#39;响应。
{StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.NoWriteNoSeekStreamContent, Headers:
{
Cache-Control: max-age=0, private
Date: Fri, 20 Apr 2018 13:11:01 GMT
Transfer-Encoding: chunked
Accept-Ranges: none
Server: GSE
Vary: X-Origin
Vary: Origin
Vary: Accept-Encoding
WWW-Authenticate: Bearer realm="https://accounts.google.com/"
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Alt-Svc: hq=":443"; ma=2592000; quic=51303433; quic=51303432; quic=51303431; quic=51303339; quic=51303335,quic=":443"; ma=2592000; v="43,42,41,39,35"
Content-Type: application/json; charset=UTF-8
Expires: Fri, 20 Apr 2018 13:11:01 GMT
}}
以下是发布请求的标题:
POST /oauth2/v4/token HTTP/1.1
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
x-ms-request-root-id: 60d8427e-4efe61d8a3b25e96
x-ms-request-id: |60d8427e-4efe61d8a3b25e96.1.
Request-Id: |60d8427e-4efe61d8a3b25e96.1.1.
Content-Length: 322
Host: www.googleapis.com
我是从我的应用程序从http://localhost:1083端口发送此请求的,我已将此网址添加到授权网址中。 我知道它有点模棱两可的错误消息,但我厌倦了打击和试验并且卡在这里。 我正在使用.net核心2。 我甚至试图点击&#34; http://www.googleapis.com/oauth2/v4/token&#34; (没有ssl)和它们返回403 Forbidden error。
答案 0 :(得分:0)
将我的头撞在墙上6个小时后,我逐一解决了以下问题:
我在本文第5步的请求中使用了不同的client_id。我必须使用与步骤2中使用的客户端ID相同的客户端ID。
同意屏幕仍然使用错误的client_id。我不得不清除缓存。
我们必须在第2步中使用的文章的第5步中使用相同的redirect_uri。这是最重要的问题。我一直在&#39; redirect_uri_mismatch&#39;由于这个问题。
希望这会对某人有所帮助。