我目前已启动并运行受IAP保护的App Engine,我的最终目标是由Apps Script项目触发此操作。我已经在没有IAP的情况下测试了代码,并且效果很好。但是,启用IAP时,成功授权访问它会遇到困难。
我已经将自己作为受IAP保护的Web App用户(以及Policy Admin)添加到App Engine,但是每当我尝试从GSheets Apps脚本触发时(我是所有者,并且该脚本与正确的GCP项目(以this great explanation为指导),我得到以下信息:
“无效的IAP凭据:JWT受众与该应用程序不匹配('aud'声明(1084708005908-bk66leo0dnkrjsh276f0rgeoq8ns87qu.apps.googleusercontent.com)与预期值不匹配(1084708005908-oqkn6pcj03c2pmdufkh0l2mcontent.apps79.com)。 “
我尝试向我的帐户添加/删除各种权限,以及创建新的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上找到任何遇到此确切问题的人。
答案 0 :(得分:2)
解决方案的问题是您使用的是自动生成的OAuth Client for Apps Script的身份。此客户端不适合这种身份验证,here受支持的OAuth客户端的完整列表。
为了完成验证,您将需要一个额外的步骤。您将必须创建另一个OAuth客户端,并使用其凭据构建身份令牌。
为了使事情变得容易,我建议使用以下Apps脚本库:https://github.com/gsuitedevs/apps-script-oauth2
链接文档中介绍了初始设置。
重要:创建OAuth客户端时,请注意ClientID和客户端机密。另外,您将需要添加授权重定向URI 。这是使用OAuth2 GAS library时的标准配置,其格式为:https://script.google.com/macros/d/{Your Apps Script ID}/usercallback
现在,您拥有构建身份令牌的所有必要信息。 Github存储库中有一个样板样本,将介绍OAuth2 GAS库的最初编码步骤。
Here是链接。
将此代码复制到您的Apps Script项目中,然后按照注释中的说明进行操作。您将需要添加一个额外的OAuth范围:"https://www.googleapis.com/auth/userinfo.email"
。
一旦使用OAuth客户端信息设置了所有常量,就应该从Apps脚本编辑器运行run()
函数。这将记录您必须在浏览器中打开以授权您的应用程序的URL。一旦授权了该应用程序再次运行run()
功能,您将成功访问受IAP保护的应用程序。