当前位置: 首页 > 知识库问答 >
问题:

如何在Google Apps Script中请求没有客户端身份验证的AdWords API?

仲孙飞文
2023-03-14

我有一个谷歌应用程序脚本绑定到一个需要读取AdWords数据的电子表格。因为它是一个自动向服务器更新的用户权限。

在浏览了大量文档之后,我创建了一个服务帐户,并根据以下指南授予它必要的权限:https://developers.google.com/adwords/api/docs/guides/authentication#oauth2_service_accounts

我还没有完全理解下一步,即如何实际发出请求,特别是在应用脚本中。这个的密码是什么?

此外,我们还接受更好的建议,以最优雅的方式在没有客户端权限的情况下请求应用程序脚本上的AdWords API。我设法得到了一个刷新令牌,它似乎是正确的轨道,但无法用它生成OAuth2令牌。

共有1个答案

商柏
2023-03-14

我发现不需要服务帐户,最好的方法是遵循安装的应用程序流程。

以下是在谷歌应用程序脚本上请求AdWords API的最简单方法:

  1. 按照此处所述创建客户端ID和客户端机密。
  2. 按照OAuth2 Playground进程获取刷新令牌,如这里所述。
  3. 通过以下过程获取您的开发者令牌。注意:您必须创建/使用单独的经理帐户,申请令牌,并等待其批准。您也可以使用测试帐户。
  4. 在这里找到您的客户客户ID-登录后,它将以XXX-XXX-XXXX的形式出现在右上角。
  5. 创建您的AWQL查询(不确定本指南是否适用于XML)。
function getGoogleAccessToken() {

    // This is also a general method to fetch an access token using a refresh token in GAS.

    var params = {
        client_id: YOUR_CLIENT_ID,
        client_secret: YOUR_CLIENT_SECRET,
        refresh_token: YOUR_REFRESH_TOKEN,
        grant_type: 'refresh_token'
    }

    const options = {
        contentType: 'application/x-www-form-urlencoded',
        method: 'post',
        muteHttpExceptions: true, // To see the whole response in case of errors
        payload: params
    }

    var url = "https://www.googleapis.com/oauth2/v4/token";

    var data = UrlFetchApp.fetch(url, options);
    return (JSON.parse(data).access_token);
}

function getAdwordsData() {

    var adwordsParams = {
        "__fmt": "CSV",
        "__rdquery": YOUR_VALID_AWQL_QUERY
    }

    var adwordsOptions = {
        contentType: "application/x-www-form-urlencoded",
        method: 'post',
        muteHttpExceptions: true,
        payload: adwordsParams
    };

    adwordsOptions.headers = {
        "Authorization": "Bearer " + getGoogleAccessToken(),
        "developerToken": YOUR_DEVELOPER_TOKEN,
        "clientCustomerId": YOUR_CLIENT_CUSTOMER_ID",
        "includeZeroImpressions": true,
        "Expect": "100-continue",
        "User-Agent": "curl, gzip",
        "Accept": "*/*",
        "Accept-Encoding": "gzip"
    };

    var url = 'https://adwords.google.com/api/adwords/reportdownload/v201710';
    var res = UrlFetchApp.fetch(url, options);
    Logger.log(res);
}
 类似资料:
  • jsonparser(msg); } } } } 我正在尝试使用JSON来放东西。所以我收到的每条消息都是用JSON库解析的。协商消息为:session_unsecurited跟踪跟踪如下:

  • 问题内容: 我需要从使用客户端证书进行身份验证的服务器请求URL,但是找不到为我的应用程序执行此操作的方法。 我的问题是我正在使用的Java客户端具有本地可用的证书文件,但是由于PC的限制,它将在其上运行,因此无法在密钥库中安装证书。 简而言之,我只是希望能够明确指定要用于我要检索的URL的证书。 有什么建议? 问题答案: 目前尚不清楚您所讨论的限制是什么。更具体地说,我不确定您认为本地证书文件和

  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

  • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

  • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一