刷新访问令牌时的Google OAuth 403

时间:2018-02-13 21:14:25

标签: c# google-api uwp google-oauth

在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;

我在这里缺少什么?

感谢您的帮助。

2 个答案:

答案 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.............
}

抱歉浪费时间。至少现在有一些工作代码供参考....