我一直在阅读很多关于这个谷歌端点的内容,我尝试过一些不太容易猜到的东西。创建Google云端点服务器并进行部署后,它将对任何HTTP请求(未经身份验证)开放。在云端点文档(指使用身份验证)中,您可以阅读有关设置OAuth2.0以使用Google帐户对用户进行身份验证的信息,但没有关于将端点服务限制为特定移动应用(Android或ios)并丢弃所有其他HTTP的文档要求。那么问题是如何验证移动应用程序(没有用户)并阻止HTTP请求(未经身份验证)?我正在构建基于Python的服务器API(enpoints)。 谢谢。
答案 0 :(得分: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对象是否为null。如果为空,则可以立即抛出未经授权的异常。
https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-java-maven 具体而言,README中的可选步骤2告知Cloud Endpoints开始在请求中查找OAuth2令牌。如果Endpoints公开的方法具有User参数。只有在找到OAuth2令牌时,它才会使用用户实例填充它,通常是有效的,并且令牌被发布到服务类API注释中定义的客户端ID。
答案 1 :(得分:0)
在设置端点API期间,您可以在clientIds
列表中提供WEB_CLIENT_ID
,ANDROID_CLIENT_ID
和IOS_CLIENT_ID
。这些值告诉Google App Engine您的应用程序将响应来自Web浏览器和Android / iOS安装的应用程序的HTTPS请求。
当您的客户首次连接您的服务器时,他们必须获取OAuth 2.0令牌才能确保通信安全,这就是您在已安装的客户端应用程序中使用WEB_CLIENT_ID
的原因。此WEB_CLIENT_ID
是您的Google Cloud应用所独有的,通过它,您的客户端将能够获得access_token
和renew_token
与后端服务器进行通信和< em>仅限您的服务器。这是cross-client authorization。
因此,如果您只需要WEB_CLIENT_ID
来获取access_token
和renew_token
,那么为什么需要ANDROID_CLIENT_ID
和IOS_CLIENT_ID
?出于安全考虑。
ANDROID_CLIENT_ID
通过后端设置通知的SHA1链接到RSA签名密钥。因此,您的GAE应用仅授予(access_token, renew_token)
仅使用应用程序控制台上列出的相同密钥签名的已安装应用程序(当然还有clientIds
列表)
最后,使用不同签名或未签名的Android应用程序将不会收到任何access_token
,无法建立安全通信渠道,甚至无法与您的服务器通信。