如何使用生成的clientid与Google云端点进行身份验证,以便在不重新部署应用的情况下对第三方用户进行身份验证

时间:2015-02-06 07:07:07

标签: google-app-engine authentication oauth google-cloud-endpoints

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

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

更新:我根据@ Alex的建议创建了feature request

2 个答案:

答案 0 :(得分:2)

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

  

因为必须在构建时指定allowed_client_ids,所以   必须在添加或更改后重建和重新部署API后端   授权的allowed_client_ids列表中的任何客户端ID   观众

所以看来您完全合理的用例目前非常明确

我建议您访问所述页面并通过"写反馈"输入功能请求。链接(在页面的右上角)以及在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(您只能在重新部署,叹息时更改有效的一堆)并且可能添加一些额外的应用层您自己的授权检查 - 确切地说应该代表您做的工作端点类型:-(。

答案 1 :(得分:0)

您可以使用星号作为客户端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 { ... }