4

我目前已启动并运行 App Engine,受 IAP 保护,我的最终目标是让 Apps Script 项目触发它。我已经在没有 IAP 的情况下测试了代码,它工作正常。但是,启用 IAP 后,我在成功授权访问它时遇到了困难。

我已将自己作为受 IAP 保护的 Web 应用程序用户(以及策略管理员)添加到 App Engine,但是每当我尝试从我是所有者的 GSheets Apps 脚本触发它并且它​​与正确的 GCP 项目相关联时(使用这个很好的解释作为指导)我得到以下信息:

“无效的 IAP 凭据:JWT 受众与此应用程序不匹配('aud' 声明 (1084708005908-bk66leo0dnkrjsh276f0rgeoq8ns87qu.apps.googleusercontent.com) 与预期值不匹配 (1084708005908-oqkn6pcj03c2pmdufkh0l7mh37f79po2.apps.googleuser))”

我尝试向我的帐户添加/删除各种权限,以及创建新的 Apps 脚本并重新添加到项目中,但无济于事。从 CLI 触发时我遇到了同样的问题,所以我很确定这是身份验证的问题,但是这是我的 Apps 脚本代码,以防万一:

function test() {
  const options = {
    headers: {'Authorization': 'Bearer ' + ScriptApp.getIdentityToken()},
    muteHttpExceptions: true
  }
  var result = UrlFetchApp.fetch('https://APP-ENGINE-URL.appspot.com', options);
  Logger.log(result);
}

和清单文件:

{
  "timeZone": "Europe/London",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": ["openid", "https://www.googleapis.com/auth/script.external_request"]
}

对此的任何帮助都非常感谢!以前从未在这里发布过,但非常绝望,在 SO 上找不到有这个确切问题的人。

4

1 回答 1

3

考虑

您的解决方案的问题是您正在使用自动生成的 OAuth Client for Apps 脚本的身份。此客户端不适合这种身份验证,这里是支持的 OAuth 客户端的完整列表。

解决方案

为了完成您的身份验证,您将需要一个额外的步骤。您必须创建另一个 OAuth 客户端并使用其凭据构建身份令牌。

为了让事情变得更容易,我建议使用这个应用程序脚本库:https ://github.com/gsuitedevs/apps-script-oauth2

初始设置包含在链接的文档中。

重要提示:创建 OAuth 客户端时,请记下 ClientID 和 Client-secret。另外,您需要添加授权重定向 URI。这是使用OAuth2 GAS 库时的标准,它具有以下形式:https://script.google.com/macros/d/{Your Apps Script ID}/usercallback

现在,您拥有了构建身份令牌所需的所有信息。在 Github 存储库中有一个样板示例,它将涵盖使用 OAuth2 GAS 库的第一个编码步骤。

是链接。

将此代码复制到您的 Apps 脚本项目并按照注释中的说明进行操作。您将需要添加一个额外的 OAuth 范围:"https://www.googleapis.com/auth/userinfo.email".

使用 OAuth 客户端信息设置所有常量后,您应该run()从 Apps 脚本编辑器运行该函数。这将记录您必须在浏览器中打开以授权您的应用程序的 URL。一旦您授权应用程序再次运行该run()功能,您将成功访问受 IAP 保护的应用程序。

参考

OAuth2 GAS 库

IAP 程序化身份验证

于 2020-06-30T09:06:02.047 回答