没有用户名/密码的Phonegap身份验证

时间:2015-10-03 04:58:03

标签: php android cordova authentication

我有一个phonegap应用程序,我只想我的应用程序用户访问我从中获取数据的api。

我使用php作为我的后端。

我所做的是创建了一个密钥,并在服务器上验证密钥。但是密钥在应用程序中是硬编码的,这意味着有人可以查看代码并找出密钥并将其作为参数传递,并获得对我不需要的api的访问权。

此外,通过使用代理也可以看到密钥。

有没有办法在应用和服务器上动态生成密钥,以便进行身份验证?或者其他一些方式。

我不希望用户提供任何类型的用户名/密码。

我不希望用户注册或登录..用户在身份验证中没有任何作用..我正在验证应用

2 个答案:

答案 0 :(得分:1)

确定可以这样做,

但在你开始之前应该做几件事。

  • 创建一个新的表格来存储我们所有的 api密钥注册时,转到生成每个用户 应用

PHP方面:

  • 获取用户密码或任何独特的东西例如: UDID Andriod,在IOS中 他们限制了对UDID的访问权限,您可能需要存储一些 钥匙串中唯一生成的ID。
  • 然后,当我们有密码 UDID 时,您可以将它们放入 在一起(或任何你想要的)并用Sha1(或任何 加密算法)并将其保存到 api密钥表
  • 每当请求点击api 时,您都可以获取 api密钥 来自标题并使用数据库验证并查看。

App Side:

  • 当用户通过应用登录时成功将api密钥传递给用户,然后将其保存在应用进一步使用
  • 当你去请求来自api 的数据时,你也可以 检索存储在应用内的 api密钥,然后将其作为标头添加到请求中并发送。

几件事:

  • 您还可以在双方创建私钥(服务器和应用) 然后将其存储在 api密钥表加密请求中 这是服务器,应用只知道使用私钥 存放在双方。
  • 此外,您还可以进行预先认证,例如 oAuth

答案 1 :(得分:0)

使用RSA,SSL / TLS中流行的算法。这一点是私钥和公钥对。

这是PHP的库和示例:

Encrypt and Decrypt text with RSA in PHP

这是Javascript的库:

RSA Encryption Javascript

我的个人建议:在ram中协商随机密钥存储区以供以后使用,而不是使用密钥对进行所有消息交换。因为它是服务器的高工作负载(比客户端多15倍)。您可以定义一个对象以将会话密钥存储在私有成员中。

funciton keyStoreObject() {
    this.publicKey = ''; //this is public
    var sessionKey = ''; //this is private
    this.negotiate() = function () { sessionKey = 123456; //You can access private sessionKey }
    this.decypt = function (str) {...}; //And write your code here
}

然后创建一个实例:

var keyStore = new KeyStoreObject;
//so now you can
keyStore.negotiate();

关于私人会员,请在此处阅读更多内容: http://javascript.crockford.com/private.html

此外,您需要在服务器端实现会话密钥存储,并包括过期时间。对于小型实例,可以使用serialize()或SQLite。

实际上,sessionKey并不完全安全(理论上)。桌面浏览器可以进行DDoS攻击。像验证码一样的人工验证可以帮助你。