如何在使用Google API JS Client时获取刷新令牌

Sam*_*rma 10 google-api google-oauth google-api-js-client

我一直在尝试实施一个需要用户授予Google Analytics访问权限的应用.我一直在关注本教程:

https://developers.google.com/analytics/solutions/articles/hello-analytics-api

在其他一些地方,AngularJs的代码使用相同的functionL

https://gist.github.com/jakemmarsh/5809963

我的问题是,auth工作得很好,但它没有返回refresh_token.它永远不会返回refresh_token.我已经尝试了网上所有可能的功能.1.第一次,2.使用prompt = force等等.但似乎什么都没有返回refresh_token.我猜这个部分被客户端或其他东西所忽略.

我需要知道当用户第一次授予访问权限时如何获取refresh_token,以便我可以保存它.

Owe*_*Cao 20

它不会按设计返回刷新令牌.您提到的教程和代码正在使用 Google API Client Library for JavaScript.此库使用OAuth 2.0客户端流来发出需要授权的请求.

正如OAuth 2.0授权框架所说:

隐式授权类型用于获取访问令牌(它不支持刷新令牌的发布),并且针对已知操作特定重定向URI的公共客户端进行了优化.这些客户端通常使用脚本语言(如JavaScript)在浏览器中实现.

实际上,授权代码流是唯一一个发布刷新令牌的流程,Google在这些场景中支持此流程:Web服务器应用程序,已安装的应用程序和有限输入设备上的应用程序,但不支持客户端(JavaScript)应用程序或服务帐户.从这里获取更多细节.

所以你不会以这种方式获得刷新令牌.


hug*_*ige 11

不确定这是否正确,但我可以使用以下代码获取刷新令牌:

window.gapi.client.init({
  apiKey: this.GOOGLE.API_KEY,
  clientId: this.GOOGLE.CLIENT_ID,
  discoveryDocs: DISCOVERY_DOCS,
  scope: SCOPES
}).then(()=>{
  const authInstance = window.gapi.auth2.getAuthInstance();
  authInstance.grantOfflineAccess()
   .then((res) => {
      console.log(res);
      this.data.refreshToken = res.code;
   });
});
Run Code Online (Sandbox Code Playgroud)