ספריות הלקוח של Cloud ל-Java משתמשות ב-Google Auth Library ל-Java כדי לאמת בקשות. הספרייה הזו תומכת בכמה סוגי אימות.
לפרטים נוספים, אפשר לעיין בREADME.md ובjavadoc של הפרויקט.
אימות בסביבת Google Cloud
כשמשתמשים בספריות מסביבה (כמו Compute Engine, Google Kubernetes Engine או App Engine), לא צריך לבצע שלבי אימות נוספים. Google Cloud Google Cloud
דוגמה לשיחה ללא אימות נוסף:
Storage storage = StorageOptions.getDefaultInstance().getService();
אימות בסביבות שאינןGoogle Cloud
כדי לבצע אימות בסביבה שאינהGoogle Cloud , יש שלוש אפשרויות נפוצות:
- (מומלץ) להשתמש בחשבון שירות.
- שימוש ב-Google Cloud SDK עם סביבת בדיקה מקומית.
- שימוש באסימון גישה קיים מסוג OAuth2.
שימוש בחשבון שירות
אחרי שמורידים את המפתח, צריך לבצע אחת מהפעולות הבאות:
- מגדירים את משתנה הסביבה
GOOGLE_APPLICATION_CREDENTIALSלמיקום של המפתח. לדוגמה:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/key.json- מספקים את קובץ פרטי הכניסה בפורמט JSON כשיוצרים את אפשרויות השירות. לדוגמה,
Storageלאובייקט הזה יש את ההרשאות הנדרשות כדי ליצור אינטראקציה עם הנתונים שלכם ב-Cloud Storage:
Storage storage = StorageOptions.newBuilder() .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream("/path/to/my/key.json"))) .build() .getService();- מגדירים את משתנה הסביבה
שימוש ב-Google Cloud SDK עם סביבת בדיקה מקומית
אם אתם משתמשים בסביבה מקומית לפיתוח או לבדיקה, אתם יכולים להשתמש ב-Google Cloud SDK.
יוצרים Application Default Credentials באמצעות הפקודה gcloud auth application-default login. ספריות הלקוח ב-Cloud ל-Java יזהו את פרטי הכניסה האלה באופן אוטומטי.
שימוש באסימון גישה קיים מסוג OAuth2
אם יש לכם אסימון גישה מסוג OAuth2, אתם יכולים להשתמש בו כדי לבצע אימות. אם כן, אסימון הגישה לא יתעדכן אוטומטית:
Credentials credentials = GoogleCredentials.create(new AccessToken(accessToken, expirationTime));
Storage storage = StorageOptions.newBuilder()
.setCredentials(credentials)
.build()
.getService();
דוגמה נוספת:
Credentials credentials = GoogleCredentials.create(new AccessToken(accessToken, expirationTime));
CloudTasksSettings cloudTasksSettings = CloudTasksSettings.newBuilder()
.setCredentialProvider(FixedCredentialsProvider.create(credentials))
.build();
CloudTasksClient cloudTasksClient = CloudTasksClient.create(cloudTasksSettings);
Application Default Credentials
אם לא תספקו פרטי כניסה, ספריות הלקוח של Cloud ל-Java ינסו לזהות אותם מהסביבה באמצעות GoogleCredentials.getApplicationDefault().
בשיטה הזו מתבצע חיפוש של Application Default Credentials במיקומים הבאים, לפי הסדר:
- קובץ פרטי הכניסה שמשתנה הסביבה
GOOGLE_APPLICATION_CREDENTIALSמפנה אליו. - פרטי הכניסה שסופקו על ידי הפקודה
gcloud auth application-default loginשל Google Cloud SDK. - פרטי הכניסה המובנים של Google App Engine.
- Google Cloud פרטי הכניסה המובנים של Shell.
- פרטי הכניסה המובנים של חשבון השירות של Google Compute Engine.
אימות באמצעות מפתח API
יש ממשקי API שתומכים באימות באמצעות מפתחות API. Google Cloud
כדי להשתמש במפתח API עם ספריות לקוח של Cloud ל-Java, צריך להגדיר ידנית את הכותרת x-goog-api-key עבור לקוח השירות הרלוונטי.
לדוגמה, כדי להגדיר את מפתח ה-API באמצעות Language service:
public LanguageServiceClient createGrpcClientWithApiKey(String apiKey) throws Exception {
// Manually set the API key using the header
Map<String, String> header = new HashMap<String, String>() { {put("x-goog-api-key", apiKey);}};
FixedHeaderProvider headerProvider = FixedHeaderProvider.create(header);
// Create the client
TransportChannelProvider transportChannelProvider = InstantiatingGrpcChannelProvider.newBuilder().setHeaderProvider(headerProvider).build();
LanguageServiceSettings settings = LanguageServiceSettings.newBuilder().setTransportChannelProvider(transportChannelProvider).build();
LanguageServiceClient client = LanguageServiceClient.create(settings);
return client;
}
דוגמה לאתחול באמצעות Language Client עם REST:
public LanguageServiceClient createRestClientWithApiKey(String apiKey) throws Exception {
// Manually set the API key header
Map<String, String> header = new HashMap<String, String>() { {put("x-goog-api-key", apiKey);}};
FixedHeaderProvider headerProvider = FixedHeaderProvider.create(header);
// Create the client
TransportChannelProvider transportChannelProvider = InstantiatingHttpJsonChannelProvider.newBuilder().setHeaderProvider(headerProvider).build();
LanguageServiceSettings settings = LanguageServiceSettings.newBuilder().setTransportChannelProvider(transportChannelProvider).build();
LanguageServiceClient client = LanguageServiceClient.create(settings);
return client;
}