我創建了端點apis,但問題是任何人都可以使用我的項目id進入api explorer並執行這些apis。我只在終端類聲明的頂部放置了Android客戶端ID(使用調試密鑰庫),但仍可以進入隱身模式並執行apis。我怎樣才能限制apis,只有我的android應用程序有訪問權限,其他所有人都會拋出一些異常?只允許我的android應用程序執行java中的端點api
回答
可以通過添加必須正確調用API的關鍵參數來保護API。如果API的用戶不知道密鑰,那麼即使使用API Explorer,他也將無法使用該API。
這種方法的優點是操作簡單,如果您需要,您可以自己嘗試API。
缺點包括很容易被確定的用戶繞過,只是通過查看流量。
沒有任何標準的谷歌建議這樣做的方式? – user531069
您可以在每個API allowed_client_ids
上使用ANDROID_CLIENT_ID,這可能是一種可能的解決方法。
我認爲如果你沒有按照它尚未這可能幫助:https://cloud.google.com/appengine/docs/python/endpoints/auth#Python_Creating_OAuth_20_client_IDs
我的代碼中有clientIds = {
您可以在API端點裝飾器中使用'allowed_client_ids'和'audiences'來限制您的apis對特定客戶端id的使用,嘗試閱讀 - **在我上面共享的鏈接中指定API後端**中的授權客戶端 – Codetoend
可以看看這個[link](http://android-developers.blogspot.in/2013/01/verifying-back-end-calls-from-android.html)如果它解決了這個目的。 – Codetoend
你需要確保你已經正確編碼您的API /後端只接受你的應用程序中的clientId;確保你做不看到com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID
上的API類在@Api註釋中的clientId之一:
@Api(
name = "myApi",
version = "v1",
clientIds = {<your android clientId>},
)
public class myApi {
// your API code here
}
如果API Explorer客戶端ID存在,它會允許它執行你的來自API的API。我不是100%肯定的,但我認爲你仍然可以看到你的API形式的瀏覽器沒有客戶端ID,但執行將會阻止一個錯誤。
你可能要考慮把適當的權威性周圍的端點調用(大約每一種方法,即每個用戶的身份驗證檢查),如果它是特別敏感。只需將User參數添加到@ApiMethod就足以讓強制用戶在執行每個方法之前進行身份驗證。
希望有所幫助。
正如我所提到的,我已經有了clientIds = {
爲此,使用對稱密鑰加密和數字簽名。不過,您需要先與Android應用分享密鑰。
下面是它的工作原理。
每當Android應用正在網絡請求,你把網址&的參數,那麼你哈希,然後使用共享的私有密鑰加密。然後您將簽名作爲另一個參數追加到URL中。
在接收端,您的Web API將驗證請求是否來自您的Android應用程序。
請注意,這將只適用於您的應用程序。這將無法正常工作,以此來捕獲所有通用的Android請求/
以下是一些值得考慮的要點:
雲端點一直支持Android客戶端ID和 包簽名,所以應該ATLEAST採取關心的事實, 只有簽署從你身邊的Android應用程序可以訪問 端點
。
如果您想從接入刪除Web客戶端,那麼我會 可能考慮的HTTP頭和代理,看看是否有識別這些網站clients.However的 肯定的方式,這將 要求你寫你自己的授權邏輯的方法 ,因爲我不相信端點的基礎設施可以爲您
自動利用這一 照顧。如果你想使用API瀏覽器來測試 了API的快捷方式通過註解爲大家
刪除訪問可能是 問題。所以請保持API Explorer訪問可用。
- 1. 如何只允許我自己的應用程序訪問我的API
- 2. 只允許從我自己的應用程序訪問我的REST API?
- 3. 允許使用execvp執行程序
- 4. 允許通過移動應用程序和我的域只能訪問REST API
- 5. 如何啓用/允許Java在CefSharp應用程序中運行
- 6. 用戶允許我的應用程序的許可權
- 7. 如何僅允許API訪問android或ios應用程序(laravel)?
- 8. 僅限我的端點訪問我的Android應用程序
- 9. 應用程序驗證程序不允許啓動我的應用程序
- 10. 如何獲得Java應用程序中的確切執行點?
- 11. 只允許我的域內的特定節點端點的請求
- 12. 只允許某個UIGestureRecognizer一次執行
- 13. 允許onclick函數只執行一次
- 14. 只允許oracle db登錄到特定的應用程序?
- 15. 只允許1個應用程序連接到特定的WiFi
- 16. 允許Wget只下載應用程序類型的PDF
- 17. 我不能在Android應用程序中使用google api java客戶端YouTubeSample
- 18. Twitter API,也允許應用程序的追隨者
- 19. 允許在iPhone應用程序中
- 20. 允許用戶下載在線內容的Android應用程序
- 21. 如何允許兩個線程以android中的預定義順序執行?
- 22. 是我的MEF嗎? (一個允許客戶端應用程序插入的核心應用程序)
- 23. 在我的Android應用程序中執行adb shell命令
- 24. 從Android應用程序執行API的權限失敗
- 25. Twitter OAuth API - 允許用戶從應用程序撤銷應用程序訪問
- 26. Android - logcat中的奇怪錯誤不允許應用程序運行
- 27. Python自定義異常類應允許在程序執行後繼續執行
- 28. 允許mvc5 c#webapi,以便只有我的應用程序可以訪問它
- 29. 如何只允許一個用戶運行我的C#程序,但也允許多個實例?
- 30. 如何允許客戶端配置我的標籤應用程序?
您可否詳細說明以下幾點: 您正在使用哪個Google API? 您將訪問哪些數據? (用戶數據與應用數據) –
看看Dropbox等如何處理認證。需要初始登錄才能獲取API密鑰並鎖定https通信。 – zaph