Google API - Oauth 2.0身份验证令牌流程

时间:2014-10-29 02:30:07

标签: javascript google-api access-token

上下文 -

  • 我正在构建一个使用Google Cal和Google+ API的网络应用程序。
  • 我需要获取刷新令牌,因为一旦用户使用站点/应用程序进行身份验证,一些调用会在他们登录后发生在幕后(其中许多是在1小时后发生的,其中最初的access_token有效)

据我所知,这是我必须遵循的流程:

  1. 通过Google控制台注册Web应用程序API - 完成。
  2. 提示用户使用以下配置变量通过呼叫完成对我的应用程序的身份验证:

  3.   var config = {
        'client_id': MY_CLIENT_ID',
        'scope': 'https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/userinfo.email',
        'response_type': 'code',
        'access_type': 'offline'
      };
    
    1. 然后,使用通过上面的auth()调用返回的Google对象,再次调用以获取access_token和refresh_token。
    2. https://developers.google.com/accounts/docs/OAuth2WebServer#refresh

      POST /o/oauth2/token HTTP/1.1
      Host: accounts.google.com
      Content-Type: application/x-www-form-urlencoded
      
      code=CODE_RETURNED
      client_id=CLIENT_ID_RETURNED
      client_secret=API_CLIENT_SECRET
      redirect_uri=API_REDIRECT_API
      grant_type=authorization_code
      

      然而,当我尝试运行此调用时,我总是会遇到某种类型的错误。现在我很难得到以下内容:

      {
        error: "redirect_uri_mismatch"
      }
      

      我在Google API设置页面和代码中将以下列为我的重定向uri:

      http://localhost/
      

      之前使用此流程的人的任何建议? 我是否需要为获取刷新令牌设置不同的内容?

1 个答案:

答案 0 :(得分:0)

关于为什么整个过程失败的问题是因为我没有包括' redirect_uri'在我最初的电话中获取代码。

我应该有:

var config = {
    'client_id': MY_CLIENT_ID',
    'scope': 'https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/userinfo.email',
    'response_type': 'code',
    'access_type': 'offline',
    'redirect_uri': MY_REDIRECT_URI
 };

然后,redirect_uri被数据命中,我设置了一个简单的节点路由来监听,生成,然后为每个经过身份验证的用户存储访问和刷新令牌。