谷歌雲平臺的驗證指南是明確的資源在這裏: https://cloud.google.com/docs/authentication
谷歌的各種身份驗證機制,用於不同的目的,所以讓我解釋一下你問的那些,和你的正確選擇應該變得更加清晰。
API密鑰爲您提供了一種方法來確定您正在代表哪個項目進行API調用。它們適合限制代表項目進行配額的請求。 API密鑰通常不被認爲是安全的,因爲它通常嵌入在客戶端應用程序和網頁中。因此,API密鑰不提供認證或授權。如果匿名用戶不能撥打電話,則API密鑰不夠用。
接下來是OAuth。 OAuth是通過Google帳戶將真實的人類用戶轉變爲經過驗證的API調用的一種方式。當你想像自己一樣做某事時,你會使用它,比如當你在本地運行一個像gcloud
這樣的應用時,或者如果你正在構建一個網站,需要人類允許他們在Google Cloud上做他們的事情代表。該過程涉及客戶端ID和祕密,並以刷新令牌和訪問令牌結束。有幾種不同的口味。
最後,服務帳戶。如果您的應用程序單獨運行而不是任何特定人員,則應通過爲應用程序創建服務帳戶來對其進行建模。服務帳戶是沒有密碼的特殊用戶。相反,他們有私鑰文件,可以與應用程序一起部署,以便他們可以自己進行身份驗證。除非您的應用程序需要代表特定用戶運行(例如,像gcloud
或gsutil
這樣的雲管理程序),否則這通常是您想要的。
Google Cloud Java library提供了一個名爲「Application Default Credentials」的功能,如果您的應用程序在App Engine或GCE中運行,則無需配置auth。如果你想在自己的本地機器上運行代碼並且安裝了gcloud
,它還可以處理auth。
下面是創建一個GCS桶計算引擎程序的an example:
Storage storage = StorageOptions.getDefaultInstance().getService();
Bucket bucket = storage.create(BucketInfo.of("myBucketName"));
注意它並沒有說有關權威性任何事情。應用程序默認憑據負責選擇適當的服務帳戶或用戶。儘管如此,假設你處於這樣的環境中。如果你有私鑰.json文件,你可以這樣做:
Storage storage = StorageOptions.newBuilder()
.setProjectId(PROJECT_ID)
.setCredentials(GoogleCredentials.fromStream(
new FileInputStream(PATH_TO_JSON_KEY))).build();
Bucket bucket = storage.create(BucketInfo.of("myBucketName"));
就是這樣!
感謝您的即時回覆,並讓我清楚憑證選擇! GoogleCredentials類使用服務帳戶密鑰對用戶進行身份驗證,因此您是否可以提供API片段,以顯示如何使用OAuth客戶端ID和API密鑰,因爲我需要使用所有這三種方法來實現身份驗證。請提供谷歌雲客戶端庫API示例 –
有各種風格的OAuth。我不得不更多地瞭解您的應用要做什麼才能很好地回答。這裏有一份關於Google OAuth的通用指南:https://developers.google.com/identity/protocols/OAuth2以及一個Java庫和示例:https://developers.google.com/api-client-library/java/ google-oauth-java-client/oauth2 –
我正在開發一個簡單的應用程序,爲了從GCS中seck獲取對象並在本地處理它,現在我需要提供選項來使用用戶需要的任何憑據類型來進行身份驗證,例如可能是OAuth客戶端ID或服務帳戶密鑰等。我可以使用服務帳戶密鑰的JSON文件進行身份驗證,並且希望使用從OAuth客戶端ID獲取的客戶端祕密JSON文件。請建議'谷歌雲客戶端庫API示例' –