我有一个phonegap应用程序,我只想我的应用程序用户访问我从中获取数据的api。
我使用php作为我的后端。
我所做的是创建了一个密钥,并在服务器上验证密钥。但是密钥在应用程序中是硬编码的,这意味着有人可以查看代码并找出密钥并将其作为参数传递,并获得对我不需要的api的访问权。
此外,通过使用代理也可以看到密钥。
有没有办法在应用和服务器上动态生成密钥,以便进行身份验证?或者其他一些方式。
我不希望用户提供任何类型的用户名/密码。
我不希望用户注册或登录..用户在身份验证中没有任何作用..我正在验证应用。
答案 0 :(得分:1)
确定可以这样做,
但在你开始之前应该做几件事。
PHP方面:
App Side:
几件事:
答案 1 :(得分:0)
使用RSA,SSL / TLS中流行的算法。这一点是私钥和公钥对。
这是PHP的库和示例:
Encrypt and Decrypt text with RSA in PHP
这是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攻击。像验证码一样的人工验证可以帮助你。