如何将敏感数据从Android应用传递到Google Cloud Endpoints?

时间:2014-09-25 18:00:12

标签: android python google-app-engine google-cloud-endpoints

我正在尝试在Google Endpoints中创建一个简单的最小会话管理类型的系统。

我在Android应用上验证用户身份。为了进行经过身份验证的Endpoint API调用,我计划通过在Android应用程序中第一次调用Endpoints API时将idToken传递给端点服务器上的用户一次。

然后,我会为该用户分配一个session_id(比如一个数字)。此session_id会传回该Android应用。 Cloud Endpoint服务器不会在接下来的24小时内验证用户。

当Android应用使用session_id调用端点API时,我会执行所需的操作,假设它来自经过身份验证的用户。

CONCERNS
如果有人嗅探session_id,他将能够执行经过身份验证的用户的操作。

问题1 从Android应用程序将敏感数据(如session_id)传递到Google Cloud Endpoints是否安全(并且正确)?

问2 即使我没有为我的网站启用HTTPS,Android应用和云端点之间的所有通信都是默认通过HTTPS完成的吗? Official doc说:

  

重要提示:Google Cloud Endpoints需要SSL。如果您需要访问   您的后端API在不支持SSL的系统中,您也需要   更新系统以支持SSL或使用代理。

另一位Official doc说:

  

在两个方法装饰器中,我们提供了指定位置的路径   该方法用于请求。指定的值将附加到   API路径,例如,如果指定了值hellogreeting,   路径是   https://your-app-id.appspot.com/_ah/api/helloworld/v1/hellogreeting。   对于greetings.getGreeting,路径为hellogreeting / {id}其中{id}   是必需的,否则您的API方法将不会收到传入的请求   参数。

注意: 我没有为我的网站启用SSL(HTTPS)。我在网络和Android / Java上使用GAE Python。我有网站和Android应用,我正在从Google身份验证迁移到Google Identity Toolkit基于多个提供商身份验证(如Facebook,Google,其他)。

1 个答案:

答案 0 :(得分:3)

<强> Q1 即可。如果它仅通过HTTPS传递,可以假设是安全的(从嗅探),虽然我不确定它是否是正确的方式取决于您的实现。你提到它会是一个数字。什么样的号码?随机生成?顺序?

另外,您使用的是用户API / webapp2吗?我喜欢内置的create_auth_token函数,它可以节省您一些时间并替换您的session_id,然后您可以使用get_by_auth_tokenvalidate_token来获取相应的用户或者只是验证令牌和delete_auth_token以使令牌无效。

如果您没有使用用户API / webapp2,那么如果您不使用随机数或序号来代替令牌,那么更好的是token = HMAC('A_VERY_LONG_AND_SECRET_KEY', user_id + todays_date),这是唯一的,有效期为24小时(从午夜开始,不是因为创建时间)并且只要密钥是秘密就是秘密是一个更好,更安全的选择。

<强> Q2 即可。即使您的自定义域没有SSL证书,您的APPID.appspot.com也会这样做(尝试通过 httpS:// 访问您的项目,您会看到)。

Cloud Endpoints始终通过SSL提供API(实际上无法更改它)。

Google向您提供的警告是关于当客户端不支持SSL连接时可能出现的情况,这种情况在现实世界中不会经常发生。