是否可以将Google身份验证(即服务帐户)用于自定义API?

Is it possible to use google authentication (i.e. service account) for custom API?

因此,我们正在GCE实例上运行的Google云上构建RESTful服务。该服务将在内部使用,即Web服务器。我正在考虑使用Oauth保护此服务。

除了维护我们自己的消费者密钥/秘密数据库之外,还可以利用已经提供的Google身份验证吗?因此,我正在设想以下内容:

  • Web服务器使用服务帐户向Google进行身份验证,并获得一些访问令牌作为响应
  • Web服务器使用此访问令牌发出Rest服务请求
  • REST服务通过Google验证此访问令牌,仅在验证访问令牌后才返回有效响应
  • 我在Google云文档中找不到这样的东西,以为我把它扔在这里了,看看SO是否更了解:)

    谢谢!


    这里有几件事要考虑。

    首先,我们通过OAuth提供服务器到服务器的身份验证,但这是针对Google API的。

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

    我想了解的是,您在VM端使用什么框架或代码来处理OAuth。您想允许/禁止谁?您末端实际上不能有任何身份验证代码,否则有什么意义?任何服务帐户都可以通过。您如何控制范围?服务帐户如何知道请求的范围?您的API如何处理授权部分?如果您要使用完整的API,则最好使用Cloud Endpoints,因为我之前提到的所有内容都将在我们端得到处理。

    如果您要设计一个简单的HTTP API,基本上是一个处理GET / POST请求并在Google Cloud上吐出对您自己的服务的响应的处理程序,则只需设置安全的服务即可进行服务通信


    您的用例正是Google Cloud Endpoints为您提供的:
    -使用服务帐户进行身份验证
    -控制台中的API指标

    Cloud Endpoints是一个API管理系统,可帮助您使用Google用于其API的相同基础结构来保护,监视,分析和设置API的配额。将API部署到Cloud Endpoints之后,可以使用Cloud Endpoints Portal创建开发人员门户,API用户可以访问该网站以查看文档并与API交互。

    在身份验证部分中,找到有关如何使用服务帐户(其他可用方法)进行安全保护的相关文档。


    对于遇到此问题的任何人,您可能都希望使用Identity Aware代理-https://cloud.google.com/iap/docs/authentication-howto

    它将在您的服务之前放置一个托管代理,该代理需要具有Google帐户的oAuth2才能通过。同时具有浏览器流和程序流。

    然后它通过标头传递到您的服务,您可以使用该标头查看用户身份并验证他们是否经过身份验证