我目前正在开发一款主要用于学习目的的应用。到目前为止,我所阅读的所有内容都让我困惑而不是帮助。我的目标是连接到MySQL数据库并检索数据。数据库由引号,作者和引用所属的类别组成。
我知道PHP和MySQL足以编写一个API来从服务器返回JSON数据。我想我明白Android应用程序需要发送一个JSON编码的POST请求。因此,我认为这使得任何人都可以对应用程序进行反编译并查看API网址,并类似地生成请求并从数据库中检索数据。
我主要担心的是,我如何以安全的方式生成Android的请求以与服务器API通信,并验证请求是否来自应用程序。
感谢阅读!
答案 0 :(得分:2)
如果我正确理解您的问题,您知道如何在Android中执行POST,但您需要一个" secure"这样做的方式。我认为您正在寻找的是一种基本的身份验证方法。
最简单的方法是让用户使用用户名/密码登录(用户名可以存储在SharedPreferences中或以其他方式存储)。正如一位用户指出的那样,关于在SharedPreferences中存储密码存在担忧,尽管这里有大量其他答案,而且应用程序使用这种存储方法 - 只需使用密码ONCE就可以使用,直到令牌过期。服务器应用程序将在第一次成功验证后提供此令牌。您必须跟踪数据库中的令牌并为其分配到期日期以获得更好的安全性。所有这些只应通过SSL执行,因此POST有效负载是加密的。
反编译应用程序并从请求中找出API端点是两件完全不同的事情。对于您的情况,您不必非常担心模糊端点,只保护POST(JSON)有效负载并提供简单的授权方法。无论如何都要对您的端点进行探测,因此最好只设置身份验证机制,以便只有那些被授权的用户才能看到数据。
创建同步适配器有助于管理所有身份验证工作,并且可以在共享首选项中相对安全地保存用户的USERNAME(和令牌)。但是,您必须在服务器上设置此用户名/密码/令牌身份验证系统。以下是一个示例流程:
User [username/password] -> Server [authentication] -> Server [token] -> User [store token]
然后,在此之后,应用程序将使用其令牌对端点进行身份验证,直到它过期(服务器将在到期时通知应用程序):
User [token] -> Server [validates token] -> User [data] -> Server [data]
令牌可以像随机GUID一样简单。
这将确保用户有权接收数据,并且只能通过POST请求执行,并且只能通过SSL执行,以确保JSON有效负载尽可能安全。你可以在这里进入一大堆其他领域,例如限制速率限制请求,以防止人们用暴力攻击或其他方式轰炸你的API,但这一切都将在服务器端完成。
当然,这不是 大多数 安全的方法,因为有更好的协议,如OAuth,但它们也很复杂,实现简单客户/服务器应用。不过,我强烈建议你调查它们。
来源:
创建同步适配器:http://developer.android.com/training/sync-adapters/creating-sync-adapter.html
如何在Android中执行HTTP POST:How to do a HTTP Post in Android?
PHP GUID:http://php.net/manual/en/function.com-create-guid.php