2014-04-08 17 views
1

我在這裏發現了許多問題/答案和其他網站上的許多文章,但我還有一些問題需要回答,然後才能開始,我無法找到答案。我想爲移動應用程序(以及某些前端)創建寧靜的api。PHP - 適用於手機認證的RESTful API

我選擇通過HTTPS的基本認證,因爲我覺得現在已經足夠了,它看起來很容易實現。所以我應該有用戶名和散列密碼保存在dabatase的權利?然後,當用戶在應用程序中寫入用戶名和密碼時,我散列了密碼,並且都通過Base64進行加密並添加到HTTP標頭中?我該如何解密並在服務器端檢查數據庫?它會如何改變鹽?

當我檢查用戶名和密碼與以前的通話後,我該如何保存這個會話?我應該創建一些session-id/token(隨機字符串)並將其保存到用戶表中的列,並將其發送回移動應用程序,然後將其用於其他調用(帶有一些到期時間戳)?它可以通過HTTP(不安全)嗎?像web.com/api?token=ASsF234Silkj&data=...或者我必須在驗證後始終使用HTTPS?

當我在所有使用此API的應用程序中使用某些API密鑰(私有)時,它將如何更改?我知道我可以隱藏密鑰,不要通過請求發送它(僅用於加密),但如果有人試圖讀取.apk並獲得API密鑰,該怎麼辦?

回答

1

首先,Base64是加密

儘管可以將基本http身份驗證與會話集成,但這不是一項簡單的任務。而且它很容易以不安全的東西結束(特別是從你問題中證明的技能水平來判斷)

你似乎計劃了大部分你想達到的目標 - 但你已經犯了大部分錯誤。

驗證後是否應繼續使用HTTPS取決於您的服務是否具有任何內在價值。

同樣如何實施代理認證令牌(包括API密鑰)在安全模型上有所變化。堅持使用HTTPS無處不在,您不必擔心更改/加密API密鑰。

1

所以我應該有用戶名和散列密碼保存在數據庫中嗎?

是的,你應該散列它,不要使用MD5或SHA1,他們現在沒有更安全。使用SHA2或SHA3。

然後當應用程序的用戶寫入的用戶名和密碼,我用的Base64哈希密碼和加密和添加到HTTP頭吧?

Base64是不是哈希函數,你可以得到的base64原始內容,它只是一種編碼方式..是的,你必須把憑據HTTP標頭。在發送用戶名和密碼(散列或純文本)時,使用HTTPS連接。 在HTTP連接中發送哈希容易受到重播攻擊的影響。

我怎樣才能解密此,並與服務器端的數據庫檢查?它會如何改變鹽?

如果你發送哈希,你不能解密它(哈希的唯一目的)。我向你推薦以下內容: 1)通過https 發送用戶名和密碼到服務器2)在服務器上創建哈希,並檢查數據庫中現有的哈希。

後,我檢查用戶名和密碼與先前調用那我怎麼才能救這個會議?

取決於其語言特點您使用

我應該創造一些會話ID /令牌(隨機字符串),並把它保存到列在用戶表,併發送回手機應用程序,然後將其用於其他調用(有一些到期時間戳)?它可以通過HTTP(不安全)嗎?

,你可以這樣做,但使用HTTPS,並且不使用時間戳,這是非常不安全的。而是產生長期的隨機字符串

將如何改變,當我使用這將使用這個API的所有應用程序的一些API密鑰(私有)?

???

我知道我可以隱藏鍵,不通過請求(使用它只是用於加密),但所發,如果有人試圖.apk文件讀取和獲得的API密鑰?

不要把鑰匙APK,本地生成它,如果它是私有密鑰(如果我得到你的意思)