无法通过 IAP 授权访问 App Engine

Trouble authorizing access to App Engine via IAP

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

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

"Invalid IAP credentials: JWT audience doesn't match this application ('aud' claim (1084708005908-bk66leo0dnkrjsh276f0rgeoq8ns87qu.apps.googleusercontent.com) doesn't match expected value (1084708005908-oqkn6pcj03c2pmdufkh0l7mh37f79po2.apps.googleusercontent.com))"

我已尝试 adding/removing 对我的帐户授予各种权限,以及创建新的 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 上找到任何有这个确切问题的人。

考虑

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

解决方案

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

为了让事情更简单,我建议使用这个 Apps 脚本库:https://github.com/gsuitedevs/apps-script-oauth2

初始设置包含在 linked 文档中。

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

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

Here 就是 link.

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

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

参考资料

OAuth2 GAS library

IAP programmatic authentication