【问题标题】:Authenticating calls from Phonegap app to REST server验证从 Phonegap 应用程序到 REST 服务器的呼叫
【发布时间】:2013-12-16 15:51:02
【问题描述】:
我正在使用 Phonegap 构建一个应用程序。它只是读取 xml 提要以显示学校上传的最新文章供家长阅读。
应用程序的每个用户都可以选择是否要接收推送通知。我有一个简单的数据库表,其中设备的注册 ID。从 Google Cloud Console 存储。当用户点击“是”时,注册 i.d.生成并存储在服务器上。如果他们然后单击“否”,则将其删除。我想通过基本的 HTTP 身份验证来保护对服务器的这些调用。
我在基本身份验证中看到的任何文档都描述了用户名和密码的发送。但是在我的应用程序中,没有用户名或密码,因为用户不需要注册。我要发送什么来验证客户端?客户端是否会有一个硬编码的密钥并随每个请求一起发送?解压apk不是很容易暴露吗?
【问题讨论】:
标签:
rest
cordova
basic-authentication
【解决方案1】:
我反对问题的前提。实际上,我认为这与其说是安全问题,不如说是偏好问题。了解其中的区别可以更轻松地开发您的功能。
只需修改您的应用程序以允许用户配置他或她希望在设置中看到的内容,然后将首选项存储在客户端上您想要的任何位置(如本地存储)。然后服务器可以像以前一样推送,但应用程序应该简单地拒绝呈现用户不想看到的那些推送。
如果您只想将非敏感内容传播给想要查看的用户,这是首选项问题和/或发布/订阅问题。但这不是安全问题。
【解决方案2】:
由于您可以访问服务器端,因此您可以控制整个过程。因此,为了处理这个问题,您可能会考虑 Web 服务器在正常身份验证的情况下创建的会话 cookie 之类的东西。
我做过类似的事情,我所做的是生成一种令牌服务器端,存储在设备的 cookie 或 localStorage 中。
所以流程应该是这样的:
- 生成令牌并将其存储在设备上(cookie 或本地存储)。
- 对于每个请求,在 http 标头中发送此值
- 从服务器端,您可以通过该令牌识别用户。
例如:您维护一个标识设备/令牌的表。
就是这样
【解决方案3】:
除了其他答案所说的之外,您还可以将自定义用户代理字符串作为请求的一部分传递,并验证它是否符合您的期望。这不是“保护”请求的可靠方法,但与(简单)令牌系统和 HTTPS 一起,这可能足以满足您的需求。