Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Google OAuth使用javascript生成的OAuth访问令牌获取刷新令牌_C#_Oauth 2.0_Google Calendar Api_Google Oauth - Fatal编程技术网

C# Google OAuth使用javascript生成的OAuth访问令牌获取刷新令牌

C# Google OAuth使用javascript生成的OAuth访问令牌获取刷新令牌,c#,oauth-2.0,google-calendar-api,google-oauth,C#,Oauth 2.0,Google Calendar Api,Google Oauth,我正在开发一个应用程序,在这个应用程序中,我需要代表用户执行对GoogleAPI的服务器端请求 基本而言,我的应用程序实现了以下功能: 使用请求身份验证和获取访问令牌 这个令牌的问题在于它的寿命很短,而且我无法用javascript-google-api扩展它。 现在,我的问题是拥有那个短期令牌我如何使用服务器端SDK(在我的例子中是c#)或直接WebClient连接来请求一个长期令牌(刷新令牌) 客户端身份验证完成后,我有以下数据: function handleAuthResult(auth

我正在开发一个应用程序,在这个应用程序中,我需要代表用户执行对GoogleAPI的服务器端请求

基本而言,我的应用程序实现了以下功能: 使用请求身份验证和获取访问令牌 这个令牌的问题在于它的寿命很短,而且我无法用javascript-google-api扩展它。 现在,我的问题是拥有那个短期令牌我如何使用服务器端SDK(在我的例子中是c#)或直接WebClient连接来请求一个长期令牌(刷新令牌)

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

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");
  }
}
所以一旦令牌可用,我就试图在服务器上扩展它,但失败了,我一定是做错了什么 下面的例子来自 使用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.API Beta v1.5,但找不到如何结合使用这两个lib的示例

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

您不能“扩展客户端生成的短期访问\u令牌”。oauth不是这样工作的

您可以采取两种方法:-

  • 您可以每小时使用Javascript获得一个新的访问令牌。如果不强制提示,用户将看不到该提示。如果您想将访问令牌传递给服务器应用以供其使用,请继续。看
  • 如果确实需要刷新令牌,则需要在请求授权(type=offline)时显式请求该令牌。这只能在服务器上完成。然后,您的服务器可以将访问令牌传递给javascript客户端,或者您的客户端可以愉快地继续请求自己的访问令牌。看

  • 注意:当前版本是v1.6。我知道当前版本是v1.6,但是它需要http.primitives,我的解决方案中不能包含这些,因此只能使用1.5。是的,这似乎是事实,不幸的是