Google 适合 Api 来自远程客户端的 403 错误

Google Fit Api 403 Error from remote client

我有一个托管在 IIS 7 上的 Web 应用程序,它使用 Google Fit API 进行 Http 调用,我能够成功发送 POST 并检索访问权限令牌,之后我为以下 uri 执行 GET:

"https://www.googleapis.com/fitness/v1/users/me/dataSources/raw:com.google.weight:com.google.android.apps.fitness:user_input/datasets/00-1427209862000000000"

以下是我如何构建请求并查看响应:

        request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "GET";
        request.ContentLength = 0;
        request.Accept = "application/json";
        request.Headers.Add("Authorization", "Bearer " + dict["access_token"]);
        response = (HttpWebResponse)request.GetResponse();
        respStream = response.GetResponseStream();
        sResponse = new StreamReader(respStream).ReadToEnd();
        respStream.Close();
        Response.Write(sResponse);

当我在主机服务器上的浏览器上 运行 这个应用程序时,我成功地获得了一个 json 对象(这不是我期望的 json,但这是另一个问题).但是,当我尝试在远程客户端上访问该站点时,我收到一个 403 错误,指向我尝试检索响应时的错误。有什么想法吗?

这可能取决于您如何获得 access_token 值。

您在检索访问令牌后多久发出此请求?它仅在一个小时内有效,因此您可能需要使用刷新令牌获取新的。

关于 access/refresh 这个问题的标记有更多资源:

Google OAuth2 Refresh_token expires when Access_token does

更新:原来是权限问题。我试图访问一个我没有范围的数据源,在主机上访问时它没有 return 403 的事实让我偏离了轨道。仍然很奇怪,当在主机服务器上请求时它没有 return 403(它只是 returned 一个空的 json 对象)......如果你看到这个并且有想法为什么,欢迎评论。我很好奇。