首页 文章

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

提问于
浏览
1

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

我在Android应用上验证用户身份 . 为了进行经过身份验证的Endpoint API调用,我计划通过在Android应用程序的第一次调用Endpoints API中传递_2528229来在 endpoints 服务器上验证用户一次 .

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

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

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

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

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

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

另一个Official doc说:

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

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

1 回答

  • 3

    Q1 . 如果它是正确的方式(取决于您的实现),则可以假设它是安全的(来自嗅探) . 你提到它会是一个数字 . 什么样的号码?随机生成?顺序?

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

    如果你没有使用用户API / webapp2它's still better if you don'吨使用随机或序列号码作为令牌,而不是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连接时可能出现的情况,这种连接在现实世界中不会经常发生 .

相关问题