0

我正在开发应用程序,我需要代表用户执行对 google API 的服务器端请求。

在基本术语中,我的应用程序执行此操作:使用gapi javascript 库请求身份验证并获取 access_token 该令牌的问题是它的寿命很短,而且我无法使用 javascript google apis 来扩展它。现在我的问题是拥有那个短暂的令牌,我如何使用服务器端 SDK(在我的情况下为 c#)或直接 WebClient 连接来请求长寿(refresh_token)?

完成客户端身份验证后,我有以下数据:

function handleAuthResult(authResult) {

  if (authResult && !authResult.error) {
    //Authentication successful
    //authResults.access_token - has a valid token that expires in 60 minutes
    //Say token set to this:ya29.AHES6ZRadMF0y*********c8GOC8KYZFkc6q1fCeT_Q
    //Now I can send it using ajax to the server handler to try to extend
  } else {
    $("#google-cal-authorize-button").button("enable");
  }
}

因此,一旦令牌可用,我就会尝试在服务器上扩展它,但它失败了我一定做错了以下示例来自https://developers.google.com/accounts/docs/OAuth2WebServer#offline Using WebClient

        WebClient wc_ = new WebClient();
        NameValueCollection prms = new NameValueCollection();

        prms["client_id"] = "91884************n4v.apps.googleusercontent.com";
        prms["client_secret"] = "cANBL0*********lMK4";
        prms["refresh_token"] = "ya29.AHES6ZRadMF0y*********c8GOC8KYZFkc6q1fCeT_Q";
        prms["grant_type"] = "refresh_token";

        wc_.UploadValuesCompleted += (object sender, UploadValuesCompletedEventArgs e) =>
        {


        };

        wc_.Headers.Add("Content-type", "application/x-www-form-urlencoded");

        byte[] response = wc_.UploadValues(new Uri("https://accounts.google.com/o/oauth2/token"), "POST", prms);

我还可以在服务器端访问 Google.Apis Beta v1.5 http://www.nuget.org/packages/Google.Apis/1.5.0-beta但找不到有关如何使用这些的示例2个库一起。

因此,如果有人可以提供有关如何在服务器上扩展客户端生成的短期 access_token 的示例,那就太好了。如果可能的话。

4

1 回答 1

1

您不能“扩展客户端生成的短期 access_token”。这不是 oauth 的工作方式。

您可以采取两种方法:-

  1. 您可以每小时使用 Javascript 获取一个新的访问令牌。如果您不强制提示,则用户将看不到它。如果您想将访问令牌传递给服务器应用程序以供其使用,请继续。请参阅https://developers.google.com/accounts/docs/OAuth2UserAgent
  2. 如果您确实需要刷新令牌,则需要在请求授权时明确请求(类型=离线)。这只能在服务器上完成。然后,您的服务器可以将访问令牌传递给 javascript 客户端,或者您的客户端可以愉快地继续请求自己的访问令牌。请参阅https://developers.google.com/accounts/docs/OAuth2WebServer
于 2013-11-07T07:37:04.657 回答