在我的情况下,我们与其他公司合作,这些公司将使用我们的API和我们的内部JavaScript客户端。我认为我们需要为javascript客户端创建一个Web客户端ID。但是当在外部公开API时,每个公司生成新的Web客户端ID是否正确?如果是这样,我们每次都必须更新clientid并重新部署应用程序?
我正在关注this文档,在他们的示例中,客户端ID是硬编码的,如果我需要授予对新的第三方用户的访问权限,那么我需要为他们生成新的客户端ID,但我希望不重新部署申请。
更新:我根据@ Alex的建议创建了feature request。
答案 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 { ... }