在UWP应用程序中,我首先使用以下端点获取刷新令牌和访问令牌:
printf
在响应的这一点上,我有一个刷新令牌和一个功能齐全的1小时访问令牌。这很好。
现在我想使用刷新令牌来更新访问令牌:
string tokenRequestBody = string.Format("code={0}&redirect_uri={1}&client_id={2}&scope=&grant_type=authorization_code",
code,
System.Uri.EscapeDataString(redirectURI),
clientID
);
StringContent content = new StringContent(tokenRequestBody, Encoding.UTF8, "application/x-www-form-urlencoded");
HttpResponseMessage response = new HttpClient().PostAsync("https://www.googleapis.com/oauth2/v4/token", content).Result;
我没有获得新的访问令牌,而是出现以下错误:
string tokenRequestBody = string.Format("client_id={0}&refresh_token={1}&grant_type=refresh_token", clientID, _refreshToken);
StringContent body = new StringContent(tokenRequestBody, Encoding.UTF8, "application/x-www-form-urlencoded");
HttpResponseMessage tokenResponse = new HttpClient().PostAsync("https://www.googleapis.com/oauth2/v4/token", body).Result;
我在这里缺少什么?
感谢您的帮助。
答案 0 :(得分:0)
您需要为Google云端硬盘添加相应的scopes。您没有在下面的代码中看到任何内容。这将阻止发出访问令牌。
string tokenRequestBody = string.Format(...&scope=...);
我还建议您查看OAuth Playground。对于构建应用程序的开发人员非常有用。
答案 1 :(得分:0)
嗯,我非常愚蠢。
上述代码完全没有错。我只是解析了错误的回复。
基本上我做了:
var dataResponse = getSomeStuffFromRestApi();
if (api authorization fails)
{
var tokenResponse = getATokenFromRestApi();
lookForTokenInResponse(dataResponse); // should've been tokenResponse.............
}
抱歉浪费时间。至少现在有一些工作代码供参考....