簡體   English   中英

使用Google Cloud Endpoints進行機器對機器的身份驗證

[英]Machine to machine authentication with Google Cloud Endpoints

CONTEXT

已使用Google Cloud Endpoints(Python)創建了一個API,許多低功耗設備將使用該API進行GET / POST數據。

與API的唯一通信將來自這些自定義設備(我擁有通信的兩端)。

研究

查看身份驗證,希望它像使用SSL / TLS客戶端證書一樣簡單:

  • 無論如何,每個遠程設備都將具有由單個項目CA簽名的客戶端證書。
  • Google雲端點要求SSL。

但是,似乎僅支持oauth2。 我正在尋找一種“干凈”的方式來實現“越區切換”身份驗證,理想情況下是利用客戶端設備上已經具有的客戶端SSL證書。

我已經研究過創建“服務” oauth2帳戶,但是由於要防止某個設備欺騙其他設備(不接受所有一組憑據),我需要為每個客戶端設備生成一個服務帳戶,在API端維護笨重且可怕。

似乎我迫在眉睫,需要在我的代碼中為每種API方法添加一層身份驗證,這在某種程度上使使用Google的雲端點服務的觀點無法兌現。

問題...最后

  1. 有沒有人在針對Google的雲端點大規模驗證“移交”機器對機器設備的經驗?

  2. 有誰知道在Oauth2身份驗證過程中以GCE支持的方式使用客戶端證書的方法嗎?

  3. 我唯一的選擇是基於POST / GET標頭中的某些加密數據在API方法中進行自定義身份驗證。 (或者只是轉向使用Apache / NGINX和客戶端證書身份驗證托管API?)

問候,馬特

我給你寫了一篇文章:

考慮到Cloud Endpoints基本上存在於OSI模型的應用程序層中,因為它通過HTTPS請求進行通信(它在TLS會話中發送HTTP請求)。 端點是否使用HTTP或HTTPS都不是開發人員可配置的選項-它必須是HTTPS。

它使用HTTPS,因為API服務器具有用於認證API服務器的TLS證書。 在安全連接內部,還防止RPC參數和響應被竊聽。 這是端點與TLS“交互”的程度-它使用它來建立會話並在此會話內發送HTTP請求。

因此,已經可以告訴您,在連接建立階段,您將無法使用TLS客戶端證書(不是常用功能)來由端點自動對API客戶端進行身份驗證。 Endpoints API服務器根本不會查看或請求TLS客戶端證書。

現在,雖然可以通過API服務器的TLS證書來保證對API服務器本身的身份驗證,但可以通過客戶端IDUsers API來完成對API 客戶端的身份驗證,后者位於您的代碼中,並抽象了App Engine當前提供的不同身份驗證選項:

  • OAuth(2.0)
  • OpenID的

因此,為了以兩種方式中的一種對您的客戶端設備進行身份驗證並仍然利用Cloud Endpoints,您將需要找到一種使每個設備執行OAuth流或OpenID流的方法,而您的系統已經為該設備最初部署時的相應auth方法。

Google(應用程序)帳戶選項

這將涉及為每個設備創建一個Google帳戶(Google的統一SSO)或一個由自定義域管理的Google Apps帳戶,並將這些帳戶的憑據提供給每個相應的設備。 您可以在此處大致了解有關自定義域身份驗證和App Engine身份驗證配置的更多信息。

OpenID選項有關帶有GAE的OpenID的常規文檔

這將涉及使用像pyoidc這樣的OpenID連接庫在GCE實例上設置自己的OpenID提供程序,以便您可以自己設置帳戶,也可能涉及為每個設備向已知的OpenID提供程序注冊帳戶。 第一個解決方案更強大,但更耗時(OpenID提供程序可以暫時關閉或永久停用,然后您的IOT網絡就不走運了)。

使用客戶端ID的第三種選擇

您當然可以生成“已安裝的應用程序”客戶端ID /秘密,並將其分發到網絡中的每個設備。 他們可以使用它來認證自己為網絡設備(而不是攻擊者的便攜式計算機),然后您相信設備可以在每個API調用中將自己的ID准確地報告為參數。 根據設備的可破解程度和打算分發它們的范圍,此方案不一定會阻止設備欺騙彼此的ID,盡管根據ID生成方案,您可能會感到非常困難(每個id很長)。足夠長的哈希值)。

如果您選擇這條路線並且確實對此感到擔心,則可以為每個設備設置一個客戶端ID,但是誰知道您是否會對每個應用程序的客戶端ID數量達到某種未記錄的限制,這也需要您可以手動執行此操作,也可以編寫腳本來登錄無頭瀏覽器中的開發控制台並執行所需的操作。

實際使用TLS客戶端證書的第四個瘋狂選項

如果您確實打算同時使用TLS客戶端證書進行身份驗證 Cloud Endpoints作為API,則可以嘗試在請求中發送客戶端證書,因為TLS正在加密請求數據(除非您的攻擊者找到了一種有效的方法解決離散離散對數問題,在這種情況下,他們可能會太忙於攻擊更重要的目標(無進攻)並永遠更改信息安全游戲),然后以某種方式在端點方法中讀取和認證證書(第三方為此,可能需要使用隨應用程序上傳的庫。

如果您對TLS客戶端證書有一定的了解,則是第四個現實選擇

從App Engine切換到Compute Engine ,基本上可以在同一數據中心內管理和托管VM。 在此框中,您可以在喜歡的任何端口上實現任何類型的連接協議,因此您可以基於連接設備的客戶端證書對傳入的API請求(而不是端點,通知)進行TLS身份驗證。

祝好運!

暫無
暫無

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

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