如何使用生成的带有 Google 云端点的 clientid 在不重新部署应用程序的情况下对第 3 方用户进行身份验证

How to use generated clientid with Google cloud endpoints for authenticating 3rd party users without redeploying app

就我而言,我们与其他公司合作,这些公司将使用我们的 API 以及我们的内部 javascript 客户端。我认为我们需要为 javascript 客户端创建一个 Web 客户端 ID。但是,当向外部公开 API 时,为每个公司生成新的 Web 客户端 ID 是否正确?如果是这样,我们是否必须每次都更新 clientid 并重新部署应用程序?

我正在关注 this 文档,在他们的示例中,客户端 ID 是硬编码的,如果我需要授予新的第 3 方用户访问权限,那么我需要为他们生成新的客户端 ID,但我会期望不重新部署应用程序。

更新:我已经按照@Alex 下面的建议创建了一个 feature request

不幸的是,https://cloud.google.com/appengine/docs/python/endpoints/auth 的文档非常明确地说,我引用,

Because the allowed_client_ids must be specified at build time, you must rebuild and redeploy your API backend after adding or changing any client IDs in the authorized list of allowed_client_ids or audiences

看来您的完全合理的用例非常明确目前未涵盖。

我建议您访问该页面并通过 "Write Feedback" link(页面右上角)输入功能请求,并在App Engine 功能跟踪器,https://code.google.com/p/googleappengine/issues/list?can=2&q=component=Endpoints&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log -- 我们同时监控两者,但使用不同的流程,因此最好同时尝试两者。

很抱歉成为坏消息的传播者。目前,似乎唯一的解决方法是将预先生成的一堆客户端 ID 中的一个分发给其他公司(你只能在重新部署时更改有效的一堆,叹息)并且可能添加一些额外的应用程序层您自己的授权检查——正是端点 应该 代表您做的那种工作:-(。

您可以使用星号作为客户端 ID,这将允许任何客户端调用它而无需重新部署您的 API 后端。不确定这是否是记录的功能,但它(至少)适用于 Python 和 Java.

@Api(name = "myapi", 
     version = "v1", 
     scopes = {"https://www.googleapis.com/auth/userinfo.email"},
     description = "My flashy API",
     clientIds = {"*"}) 
public class MyAPI { ... }