[英]How do I enable secure user data access using Firebase without requiring user to login
[英]How can I secure my Endpoints API without user login
我正在開發一個Android應用程序,並且想限制對我的網站和移動應用程序的API訪問。 我對讓用戶登錄到我的應用程序不感興趣,而是對客戶端進行注冊。
我將這些資源用於此任務:
到目前為止,這是我所做的:
制作一個常量類,將其添加到我的clientIds的API聲明中
clientId {android_key,web_key} &&聽眾{web_key,android_audiance}
向每個方法添加了用戶用戶參數
重建項目,已部署。
所有這些資源似乎都有幫助,尤其是文檔。 但是,我沒有發現任何區別。 在遵循文檔並重新部署后端之后,我希望看到我的網站和應用程序都無法調用我的終結點函數。 但是,他們倆都完美地工作了。
這些帖子或文檔后面的內容是否可以證明我的情況,還是我還必須做其他事情? 我也不想未經授權訪問我的API資源管理器!
任何幫助將不勝感激!
編輯:
我使用了錯誤的密鑰,使用的是API密鑰而不是CLIENT ID。 更新后,我發現我的API請求失敗,因為用戶參數為null。 現在我的問題是,如何在不讓用戶登錄的情況下傳遞非null用戶對象?
我嘗試制作一個GoogleAccountCredintal並將其傳遞給我的Async任務中的ApiBuilder,但始終為null。
GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(context,APIClientKeys.ANDROID_CLIENT_ID);
MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), credential) ...
一個非常明智的網絡開發人員曾經說過
“永遠不要信任客戶”。
無論您采用何種復雜的機制保護應用程序安全,它所需要的只是一個網絡檢查器(就像您可以在Web瀏覽器中找到的)和一個代碼檢查器(您也可以在您的Web瀏覽器中找到的)。 現在,有些人可能建議使您的客戶不滿意(這足以破壞代碼,以至於有人不能僅僅看到它)。 但是,如果有人真的想取消您的應用程序的功能。 一旦投入了巨大的精力,他們將成功對客戶進行反向工程,他們便可以編寫自己的惡意客戶端來濫用您的端點。
那么,您實際上可以做什么?
如何操作:在服務器和應用程序上設置密鑰。 假設它是SECRETKEY123。 向API發出請求時,請發送一個額外的參數,稱為auth。 在其中傳遞參數和密鑰的md5(或其他任何形式,例如bcrypt)哈希值。 (注意:不應發布密鑰)
所以像auth = md5(param1 + param2 + SECRETKEY123);
然后,在服務器上,使用已經存儲在服務器上的密鑰執行相同的哈希。 比較兩個哈希值-即您提交的哈希值和您在服務器上生成的哈希值。 如果它們匹配,則允許訪問–否則限制訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.