אימות הבקשות

ספריות הלקוח של 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 , יש שלוש אפשרויות נפוצות:

  1. (מומלץ) להשתמש בחשבון שירות.
  2. שימוש ב-Google Cloud SDK עם סביבת בדיקה מקומית.
  3. שימוש באסימון גישה קיים מסוג OAuth2.

שימוש בחשבון שירות

  1. יצירת מפתח JSON לחשבון שירות.

  2. אחרי שמורידים את המפתח, צריך לבצע אחת מהפעולות הבאות:

    • מגדירים את משתנה הסביבה 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 במיקומים הבאים, לפי הסדר:

  1. קובץ פרטי הכניסה שמשתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS מפנה אליו.
  2. פרטי הכניסה שסופקו על ידי הפקודה gcloud auth application-default login של Google Cloud SDK.
  3. פרטי הכניסה המובנים של Google App Engine.
  4. Google Cloud פרטי הכניסה המובנים של Shell.
  5. פרטי הכניסה המובנים של חשבון השירות של 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;
  }