如何使用Javascript从Google Api检索服务帐户OAuth2令牌?

如何使用Javascript从Google Api检索服务帐户OAuth2令牌?,javascript,google-api,google-oauth,service-accounts,Javascript,Google Api,Google Oauth,Service Accounts,我需要使用GoogleProjects服务帐户来使用JavaScript访问GoogleAPI。为了做到这一点,我需要将OAuth2连接到google API服务器,以获取身份验证令牌 我知道Google提供了一个用于节点服务器的库(GAPI),但我需要一个能够在其他安全JavaScript环境中工作的解决方案。这项任务有两个主要部分 配置 编码 首先执行配置步骤 如果您没有google帐户: 导航到 查找并单击“登录” 单击“更多选项” 单击“创建帐户” 按照以下步骤创建帐户 导航到api

我需要使用GoogleProjects服务帐户来使用JavaScript访问GoogleAPI。为了做到这一点,我需要将OAuth2连接到google API服务器,以获取身份验证令牌


我知道Google提供了一个用于节点服务器的库(GAPI),但我需要一个能够在其他安全JavaScript环境中工作的解决方案。

这项任务有两个主要部分

  • 配置
  • 编码
  • 首先执行配置步骤

    • 如果您没有google帐户:
    • 导航到
    • 查找并单击“登录”
    • 单击“更多选项”
    • 单击“创建帐户”
    • 按照以下步骤创建帐户
    • 导航到api仪表板:
    • 通过单击当前项目来选择或创建项目。我展示的项目叫做“我的项目”

    • 单击并启用您计划使用的API

    • 导航到凭据部分:
    • 单击并选择“服务帐户密钥”
      • 如果您创建了一个新的服务帐户,为了进行测试,请将角色设置为“项目”“所有者”。你最终会想了解一下谷歌Api的角色。看到和
    • 确保“密钥类型”为“Json”,然后单击“创建”。您的密钥/证书将自动下载
    现在进入编码部分

    • 首先下载并添加对“jsrsasign-all-min.js”的引用。如果需要,可以从github下载“jsrsasign-all-min.js”
    • 第二步使用您的证书/密钥(先前下载)更新以下脚本:

    • 当您测试代码时,您应该会收到一个带有auth令牌的json对象。您可以这样测试您的实现:

      postJWT(getJWT(text), function(){
          let token = JSON.parse(response).access_token;
          //Do your api calls here using the token. 
          //Reuse the token for up to 1 hour.
      });
      
    下面是一个成功使用令牌的json对象示例:

    {
        "access_token": "ya29.c.ElkABZznrLNLK6ZAq2ybiH5lsRJpABE8p7MlZZJ0WCKcDNDv75lh-o1iRX__uMNUKSySiawm4YJGsbfqJH2JH61nRK6O2m0GJR7DgkEmo6ZlKtrvzke9C3xpwA",
        "token_type": "Bearer",
        "expires_in": 3600
    }
    

    请注意,这种方法要求可以从javascript环境访问密钥/证书。如果此环境为公共环境,则您的api易受攻击。

    您好,我想知道如何结合调用google analytics来使用此环境api@Elvira我已经更新了代码,以反映应该将api调用放在哪里。如果您需要使用令牌设置api调用的帮助,请提出新问题并标记我或将其链接到此处,以便我可以提供帮助。我将尽力留意它。我已成功地按照上面的说明操作,并且我能够登录并检索服务帐户的令牌。然而,当我试图从gapi获取日历数据时,我得到了一个空数组。这里有谁能帮忙并提供一些建议吗?你能阅读日历或其他东西吗?您可以写入日历或其他api吗?您可能没有日历权限,但我无法确切说明您的问题所在。要导入jsrsasign,我已下载了.js文件,并在getJWT()函数中添加了以下三行:var imported=document.createElement('script');imported.src='jsrsasign-all-min.js';文件.头.子项(导入);
    {
        "access_token": "ya29.c.ElkABZznrLNLK6ZAq2ybiH5lsRJpABE8p7MlZZJ0WCKcDNDv75lh-o1iRX__uMNUKSySiawm4YJGsbfqJH2JH61nRK6O2m0GJR7DgkEmo6ZlKtrvzke9C3xpwA",
        "token_type": "Bearer",
        "expires_in": 3600
    }