我正在尝试在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,其他)。
答案 0 :(得分:3)
<强> Q1 即可。如果它仅通过HTTPS传递,可以假设是安全的(从嗅探),虽然我不确定它是否是正确的方式取决于您的实现。你提到它会是一个数字。什么样的号码?随机生成?顺序?
另外,您使用的是用户API / webapp2吗?我喜欢内置的create_auth_token
函数,它可以节省您一些时间并替换您的session_id
,然后您可以使用get_by_auth_token
或validate_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连接时可能出现的情况,这种情况在现实世界中不会经常发生。