簡體   English   中英

如何在沒有用戶登錄的情況下保護Endpoints API

[英]How can I secure my Endpoints API without user login

我正在開發一個Android應用程序,並且想限制對我的網站和移動應用程序的API訪問。 我對讓用戶登錄到我的應用程序不感興趣,而是對客戶端進行注冊。

我將這些資源用於此任務:

到目前為止,這是我所做的:

  1. 從Google雲控制台生成了一個Android和Web客戶端api密鑰。 看起來像這樣:ALzfShCF_mD_IVlVVVf2783TG9FG8x7u0s-ZFQE(不是真實密鑰)
  2. 制作一個常量類,將其添加到我的clientIds的API聲明中

    clientId {android_key,web_key} &&聽眾{web_key,android_audiance}

  3. 向每個方法添加了用戶用戶參數

  4. 重建項目,已部署。

所有這些資源似乎都有幫助,尤其是文檔。 但是,我沒有發現任何區別。 在遵循文檔並重新部署后端之后,我希望看到我的網站和應用程序都無法調用我的終結點函數。 但是,他們倆都完美地工作了。

這些帖子或文檔后面的內容是否可以證明我的情況,還是我還必須做其他事情? 我也不想未經授權訪問我的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瀏覽器中找到的)。 現在,有些人可能建議使您的客戶不滿意(這足以破壞代碼,以至於有人不能僅僅看到它)。 但是,如果有人真的想取消您的應用程序的功能。 一旦投入了巨大的精力,他們將成功對客戶進行反向工程,他們便可以編寫自己的惡意客戶端來濫用您的端點。

那么,您實際上可以做什么?

  • 通過IP或其他參數使用某些速率限制技術(例如Limitd )在某個端點上使用速率限制,然后在IP濫用您的服務時將其列入黑名單,這將使濫用api變得非常困難。
  • 強制用戶登錄。

如何操作:在服務器和應用程序上設置密鑰。 假設它是SECRETKEY123。 向API發出請求時,請發送一個額外的參數,稱為auth。 在其中傳遞參數和密鑰的md5(或其他任何形式,例如bcrypt)哈希值。 (注意:不應發布密鑰)

所以像auth = md5(param1 + param2 + SECRETKEY123);

然后,在服務器上,使用已經存儲在服務器上的密鑰執行相同的哈希。 比較兩個哈希值-即您提交的哈希值和您在服務器上生成的哈希值。 如果它們匹配,則允許訪問–否則限制訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM