1

我已经阅读了很多关于这个 google 端点的内容,并且我正在尝试一些不太容易猜到的东西。创建谷歌云端点服务器并部署后,它对任何 HTTP 请求(未经身份验证)都是开放的。在云端点文档(指使用身份验证)中,您可以阅读有关设置 OAuth2.0 以使用 google 帐户对用户进行身份验证的文档,但没有关于将端点服务限制为特定移动应用程序(android 或 ios)并丢弃所有其他 HTTP 的文档要求。所以问题是如何验证移动应用程序(无用户)并防止 HTTP 请求(未验证)?我正在基于 Python 构建我的服务器 API(enpoints)。谢谢你。

4

2 回答 2

1

为了将您的 Endpoint 限制为特定应用程序,您可以使用 OAuth2。这是因为 OAuth2 流执行用户身份验证,而 OAuth2 流本身对请求 OAuth2 访问的应用程序进行身份验证。

这两个客户端示例详细说明了如何在客户端启用经过身份验证的调用。您必须在http://cloud.google.com/console/的开发者控制台中注册您的应用程序。

https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-android(在自述文件中的注释之后开始) https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-ios/(自述文件中的第 8 步)

authedGreeting 是经过身份验证的调用,您将在方法的后端项目中检查 User 对象是否为空。如果为空,那么您可以立即抛出未经授权的异常。

https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-java-maven 具体来说,README 中的可选步骤 2 告诉 Cloud Endpoints 开始在请求中查找 OAuth2 令牌。如果 Endpoints 公开的方法具有 User 参数。仅当找到 OAuth2 令牌、通常有效并且令牌已颁发给服务类的 API 注释中定义的客户端 ID 时,它才会使用用户实例填充它。

于 2013-10-17T00:27:06.187 回答
0

在设置端点 API 期间,在clientIds列表中提供您的WEB_CLIENT_IDANDROID_CLIENT_IDIOS_CLIENT_ID例如。这些值告诉 Google App Engine,您的应用程序将响应来自 Web 浏览器和 Android/iOS 已安装应用程序的 HTTPS 请求。

当您的客户端首次连接您的服务器时,他们必须获取 OAuth 2.0 令牌以确保通信安全,这就是您WEB_CLIENT_ID在已安装的客户端应用程序中使用 的原因。这WEB_CLIENT_ID是您的 Google Cloud 应用程序所独有的,通过它您的客户端能够获得一个access_token和一个renew_token来与您的后端服务器您的服务器进行通信。这是一个跨客户端授权

所以,如果你只需要WEB_CLIENT_ID来获得access_tokenrenew_token,为什么你需要ANDROID_CLIENT_IDIOS_CLIENT_ID?出于安全原因。

通过ANDROID_CLIENT_ID在后端设置时通知的 SHA1 链接到 RSA 签名密钥。因此,您的 GAE 应用程序将仅授予(access_token, renew_token)已安装的应用程序,该应用程序使用您的应用程序控制台(当然还有您的clientIds列表)中列出的相同密钥签名

最后,使用不同签名或未签名的 Android 应用程序将不会收到任何access_token消息,无法建立安全的通信通道,甚至无法与您的服务器通信。

于 2015-01-17T18:00:53.013 回答