我認爲你將永遠無法隱藏的URL由應用程序 叫(我是否正在運行一個根版Android手機,我應該能夠窺探所有網絡通信)
但你真正的問題是你需要以某種方式驗證你的api。
一種方法是實現OAUTH,但也許這是矯枉過正。
如果你想要一個簡單的機制,那麼這個怎麼樣;
- 創建祕密密鑰
- 構建的API請求(如:https://my.example.com/users/23?fields=name,email)
- 哈希這個請求路徑+加你的密鑰(例如MD5(網址+ SECRET_KEY)== 「a3c2fe167」)
- 該散列添加到您的要求(現在是https://.....?fields=name,email&hash=a3c2fe167)
- 的API結束,做相同的轉換(刪除散列PARAM)
- 檢查URL的MD5和祕密密鑰
只要祕密保守祕密,沒有人可以僞造你的請求。
例(僞代碼):
Android的一面:
SECRET_KEY = "abc123"
def call_api_with_secret(url, params)
# create the hash to sign the request
hash = MD5.hash(SECRET_KEY, url, params)
# call the api with the added hash
call_api(url+"&hash=#{hash}", params)
end
服務器端:
SECRET_KEY = "abc123"
def receive_from_api(url, params)
# retrieve the hash
url_without_hash, received_hash = retrieve_and_remove_hash(url)
# check the hash
expected_hash = MD5.hash(SECRET_KEY, url_without_hash, params)
if (expected_hash != received_hash)
raise our exception!
end
# now do the usual stuff
end
非常感謝,@ matthew-rudy :)我是否爲每個用戶創建了「密鑰」?如果那樣,我該如何分配它?如果我在註冊後將密鑰發送給應用程序作爲響應,則可以簡單地從他的桌面瀏覽器進行API調用,並將密鑰作爲響應。 – giga
在馬修的方法中,祕密密鑰絕不會通過電線發送。這是一個「鹽」,附加到URL來創建一個哈希。由於哈希是單向函數,因此用戶無法從中恢復密鑰。它需要用戶反編譯APK並查看源代碼以找到密鑰。您可以使用代碼混淆技術來使這變得更加困難,但只要有足夠的時間和動力,人們總能找到鑰匙。 –
確實@JasonLeBrun,我添加了一個僞代碼示例。但是,千兆,我建議你在PHP中搜索現有的框架,而不是創建自己的框架。我確定必須有許多現有的解決方案。 –