2015-10-03 52 views
0

我有一個phonegap應用程序,我只想我的應用程序用戶訪問我從哪裏獲取數據的API。Phonegap身份驗證沒有用戶名/密碼

我使用php作爲我的後端。

我所做的是我創建了一個密鑰,並對服務器上的密鑰進行了身份驗證。但是關鍵是在應用程序中進行了硬編碼,這意味着有人可以查看代碼並找出密鑰並將其作爲參數傳遞並獲取我不想要的api。

此外,通過使用代理也可以看到密鑰。

是否有一種方法可以在應用程序和服務器上動態生成密鑰,以便進行身份驗證?或者以其他方式。

我不要希望用戶給任何一種用戶名/密碼。

我不希望用戶註冊或login..the用戶在authentication..i沒有作用正在驗證應用

回答

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攻擊。驗證碼等人類驗證可以幫助您。

1

是的,這是可以做到的,

但你應該開始的幾件事情。

  • 創建一個新的來存儲所有API密鑰我們是 要每用戶產生時,他們通過 應用註冊。

PHP端:

  • 吸引用戶密碼或任何獨特的東西如:UDID的Andriod,在IOS 他們已經限制訪問UDID,你可能需要存儲一些 獨特生成的ID在鑰匙扣
  • 然後當我們有密碼UDID你可以把它們 在一起(或任何你想要的),並與Sha1(或任何 加密算法)加密,並將其保存到API密鑰表
  • 每當一個請求擊中API可以從頭搶API密鑰 和驗證它與數據庫的d見。

應用程序方面:

  • 當用戶登錄通過app如果成功通過API密鑰的用戶保存它的應用程序的內進一步使用
  • 此外,當你去請求中的數據從API可以 檢索存儲應用內API密鑰,然後把它作爲一個頭在請求和發送。

一些額外的東西:

  • 你也可以創建在兩側私鑰(服務器和應用程序) 然後將其存儲在API密鑰表加密請求 這是服務器和應用程序只知道使用私鑰 存儲在雙方。
  • 你也可以去提前認證喜歡oAuth
+0

我不希望用戶註冊或login..the用戶在authentication..will這仍然工作,那麼沒有作用? – krv

+1

@krv爲什麼你不想註冊並登錄?? ..我不**推薦你這個..而我的回答不會爲你工作..也**你的** api **將容易..您無法在沒有身份驗證的情況下限制訪問**。您必須使用任何人都能看到的硬代碼。 – jlocker

+1

@krv然後它也不會是一個** api ** – jlocker

相關問題