【问题标题】:App-server communication protocol应用服务器通信协议
【发布时间】:2015-11-01 13:33:19
【问题描述】:

我正在构建一个将连接到服务器的小 android 应用程序。

我的应用会使用简单的帖子向我的服务器发送消息,而我正在使用 Google Cloud Messaging 让服务器向我的应用发送消息。

我建立了一个注册页面、一个电子邮件确认和一个连接页面,但现在我想知道如何锁定服务器和应用程序之间的通信。

这是我想到的协议(让我们以应用到应用消息的简单示例为例):

  • 应用程序将发布信息与自我信息(如姓名和 auth_token)、目标用户和消息一起发送到服务器
  • 服务器搜索属于目标用户的应用,并使用curl将消息转发到GCM
  • GCM 将消息发送到目标应用程序

服务器如何确定服务器收到的名称、auth_token 等确实来自发件人?

【问题讨论】:

    标签: android security server google-cloud-messaging


    【解决方案1】:

    让服务器在客户端进行注册时生成身份验证令牌并将其发送回客户端。服务器现在知道 [client - token] 映射。

    每次客户端要发送消息时,它也会发送服务器可以查找和检查的身份验证令牌。客户端甚至不必发送他或她的姓名,服务器应该知道这一点。

    要防止 MITM 攻击,请使用安全连接 (HTTPS)。

    【讨论】:

    • 但是如果我不希望用户为每条发送的消息输入凭据,那么我应该将这些凭据存储在手机上,这似乎不是一个好主意,不是吗?
    • 为什么不呢?我在设计 API 时考虑到了 this SO answer
    • 因为密码将以纯文本形式存储,所以任何拥有根设备的人(比如我)基本上都会向世界展示他们的密码......看到这个 SO 答案:stackoverflow.com/a/786588/3888000
    • 我的建议是他在他的帖子中所说的“如果可能的话,我会考虑修改服务器以使用协商令牌来提供访问权限,比如 OAuth。”。不要在那里存储密码,只是一个身份验证令牌(基本上是一个密码)。但基本上,是的,正如您所说,本地存储的任何内容都可以通过某种方式访问​​。
    【解决方案2】:

    虽然有很多解决方案可以确保连接安全,但当您使用 GCM 处理下游消息时,我建议您使用支持上游消息传递(从客户端到服务器)的新 Google Cloud Messaging API。 它非常快速、可靠和安全。 在这里你可以找到docs

    您应该只将服务器端从 HTTP 更改为 XMPP。

    在这里您可以找到docs

    【讨论】:

    • 我真的不是专业人士,所以这对我来说似乎有点复杂,但我会试一试,谢谢! (PS 你给了两次相同的链接)
    • @DanChaltiel 谢谢,我编辑了帖子并使链接正确。
    • 我想在我能使用 XMPP 之前我的脑袋就会爆炸。我设法在我的树莓派上安装了一个 XMPP 服务器,它与 pidgin 配合得很好,但没有找到任何工作代码的 android 示例。每个人都说要使用 Smack,但是任何地方都没有更新的文档。你能帮我吗?
    • @DanChaltiel 请注意,您的客户端不需要更改。您可以将google docs 用于客户端实现,它对于HTTP 和XMPP 都是一样的。但是对于上游消息,这里是docs
    • @DanChaltiel 你也可以找到官方的谷歌示例应用程序here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2012-09-25
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多