使用谷歌身份验证(即服务帐户)来自定义API是否可行?

7

我们正在使用Google Cloud在GCE实例上构建RESTful服务。这个服务将在内部使用,即web服务器。我考虑使用Oauth保护此服务。

但是,是否有可能利用Google认证已经提供的功能,而不是维护自己的消费者密钥/密钥数据库?因此,我设想以下流程:

  1. Web服务器使用服务帐户与Google进行身份验证,并获得一些访问令牌作为响应
  2. Web服务器使用此访问令牌向REST服务发出请求
  3. REST服务使用Google验证此访问令牌,仅在验证通过时返回有效响应

我在Google Cloud文档中找不到类似的内容,所以我想在这里询问一下,看看SO是否更了解情况 :)

谢谢!


我不太确定为什么您需要使用Google OAuth来验证内部服务器之间的通信。使用IAM或基于IP限制的方法会更好,可以避免额外的令牌刷新负载。您是否希望通过重用服务帐户密钥来获得某些价值 - 例如作为撤销的单一点或类似的东西? - Peter Scott
3个回答

3
对于遇到这个问题的任何人,您可能需要 Identity Aware Proxy - https://cloud.google.com/iap/docs/authentication-howto。它将在您的服务前放置一个托管代理,需要使用 Google 账户的 oAuth2 来通过验证。它具有浏览器和编程流程。然后,它会将标头传递给您的服务,您可以使用它们来查看用户是谁并验证他们是否已进行身份验证。

这确实是GCP的一个很棒的功能,但并没有回答问题。我们在谈论服务器对服务器的身份验证。 - lucaconlaq
啊,网络内的流量,是的,我忘记了。我认为你仍然可以建立一个只有内部防火墙规则的负载均衡器,并在其上安装IAP。不过我不确定,因为我没有使用过这种配置。 - Chris Sainty
IAP或身份感知代理不适用于服务器之间的通信,而是用于终端用户访问基于Web的服务(与使用VPN连接相对)。 - koma

3
您的使用情况正是Google Cloud Endpoints所提供的: - 使用服务账户进行身份验证 - 在控制台中查看API指标
Cloud Endpoints 是一个 API 管理系统,它可帮助您使用 Google 用于自己的 API 的相同基础架构来保护、监视、分析和设置 API 的配额。在将 API 部署到 Cloud Endpoints 后,您可以使用 Cloud Endpoints 门户网站创建开发者门户网站,让 API 的用户可以访问并查看文档以及与 API 进行交互。
在身份验证部分,您可以找到相关文档,了解如何使用服务账户进行安全保护(还有其他可用方法)。

3

这里有几个需要考虑的问题。

首先,我们提供通过OAuth进行服务器到服务器身份验证,但这仅适用于谷歌API。

其次,我们提供Cloud Endpoints服务器到服务器身份验证,但这是在Cloud Endpoints上托管的API,而不是在您自己的GCE VM上托管的自定义API。

我想理解的是,在VM端处理OAuth的框架或代码是什么。您想允许/禁止谁?您实际上无法在自己的端点上没有任何身份验证代码,否则它有什么意义呢?任何服务帐户都可以通过。您如何控制范围?服务帐户甚至如何知道要请求什么范围?您的API如何处理授权部分?如果您正在制作一个完整的API,则最好使用Cloud Endpoints,因为我们会处理之前提到的所有内容。

如果您正在设计一个简单的HTTP API,基本上是一个处理GET/POST请求并向Google Cloud上的自己的服务输出响应的处理程序,那么您可以简单地设置安全的服务对服务通信

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接