首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过模拟没有键的服务帐户在本地生成Google签名URL

通过模拟没有键的服务帐户在本地生成Google签名URL
EN

Stack Overflow用户
提问于 2022-10-18 10:53:58
回答 3查看 70关注 0票数 0

我想使用NodeJS中的来生成签名的URL

它在云运行环境中工作,但我找不到任何方法在本地弥补它!最后总是出现以下错误:

代码语言:javascript
运行
复制
Error: Cannot sign data without `client_email`.

我知道我必须为此使用一个服务帐户(SA),并且它通过使用命令gcloud config set auth/impersonate_service_account SA_EMAIL或直接gsutil -i SA_EMAIL signurl -d 10m -u gs://bucket/file来模拟一个帐户运行得很好

但是它不是由代码工作的,因为我的ADC凭据似乎没有使用在CLI中工作的模拟

我知道我可以这样传递服务帐户的密钥文件。

代码语言:javascript
运行
复制
const storage = new Storage({
  credentials: {
    client_email: 'SA_EMAIL',
    private_key: 'path/to/key.json'
  }
});

但是我的组织不允许,所以我必须找到另一种方法让代码知道我使用的是正确的SA

EN

回答 3

Stack Overflow用户

发布于 2022-10-18 19:50:27

您的组织是正确的,您不需要使用服务帐户密钥文件,这是一件坏事/想法。

您可以使用不同的方法,但不确定它在nodeJS中是否有效。

试试那个gcloud auth application-default login --impersonate-service-account=xxxx。此命令将根据您自己的身份在本地计算机上创建凭据,并模拟服务帐户。

然而,有几个库接受这种新模式(不是新的,我猜是6个月前实现的),但只有JAVA支持它。我做了一个歌朗的贡献,让戈朗支持它。)我不知道NodeJS Google OAuth2库是否支持这种身份验证模式。

我还有另外两个选项(在Python中),但似乎Node中不支持它(我深入了解了源代码,该特性没有实现)

如果它仍然不能工作,并且继续不使用服务帐户密钥文件(这很糟糕),我建议您在客户端库中实现与我在Python中使用的特性相同。我没有NodeJS的技能来做到这一点,如果你可以,如果你有时间作出贡献,那就太好了!

票数 0
EN

Stack Overflow用户

发布于 2022-10-19 17:43:28

您是否知道服务帐户是否在云运行环境中被授权?

我猜想云运行环境可以工作,因为服务帐户是在该环境中授权的。另一方面,在本地,您可能对服务帐户没有权限,因此无法模拟它。

一种解决方案可能是将自己添加为服务帐户用户服务帐户令牌创建器

票数 0
EN

Stack Overflow用户

发布于 2022-10-18 19:00:26

如果您的组织不允许下载服务帐户密钥,您将无法在本地计算机上获得服务帐户密钥。

您有一些本地测试的选项(我想您这样做是为了测试?)。如果允许的话,最简单的方法是创建一个不属于组织的单独项目,并从那里获取服务帐户密钥。如果它与您的组织的权限和数据完全断开连接,那么希望稍微放松一些凭据是可以接受的。

另一种选择是使用HMAC身份验证,如果它适用于您用来签名URL的任何工具和库。如果您的组织策略没有阻止HMAC签名请求(尽管它们很有可能会阻止HMAC签名请求),您也许可以使用HMAC凭据来签名请求,而不是服务帐户密钥。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74109780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档