我正在尝试将在文档this step中获得的授权代码交换为刷新和访问令牌。我遇到的问题是如何发送对Json的请求,该请求包含here中所述的访问和刷新令牌。
这是我的代码:
string paras = string.Format("code={0}&client_id={1}&client_secret={2}&grant_type={4}&redirect_uri={3}",
AuthCode,
ClientID,
ClientSecret,
"urn:ietf:wg:oauth:2.0:oob",
"authorization_code"
);
var req = WebRequest.Create("https://www.googleapis.com/oauth2/v4/token/") as HttpWebRequest;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
byte[] data = Encoding.UTF8.GetBytes(paras);
req.ContentLength = data.Length;
using (Stream stream = req.GetRequestStream())
stream.Write(data, 0, data.Length);
req.GetResponse();
System.Net.WebException: 'The remote server returned an error: (400) Bad Request.'
被扔到req.GetResponse();
。
我的两个理论是我需要在开发人员控制台中添加重定向uri并使用它或添加代码验证程序。
答案 0 :(得分:1)
向https://accounts.google.com/o/oauth2/v2/auth
发出请求以启动OAuth2流并获取Auth Code(OAuth 2.0 Step 2)时,redirect_uri
参数接受特殊的urn:ietf:wg:oauth:2.0:oob
URI来指定手动复制/粘贴获得的响应。
但是,在OAuth 2.0 Step 5(将身份验证代码交换为刷新和访问令牌)中,redirect_uri
参数不接受上述URI,因此您必须使用在您的GCP项目中已设置的有效密码(您可以通过转到凭据>您的凭证>授权的重定向URI添加一个密码)。
此外,为了调试API返回的响应错误,建议您检出this link,其中介绍了如何获取和打印与失败请求一起返回的信息。
答案 1 :(得分:1)
redirect_uri
必须与when the authorization code was requested相同。
我也错过了this step。 code_challenge
可以与code_verifier
相同,但前提是code_challenge_method
是plain
。该文档说,仅在以后需要时才“建议”请求授权码。