אימות באמצעות חשבון שירות

דרישות מוקדמות

במאמר הזה אנחנו יוצאים מנקודת הנחה שכבר:

הגדרת אימות

כדי לבצע אימות באמצעות חשבון שירות:

  1. מוסיפים את הערכים הבאים ל-@Api או להערת השיטה:

    • מוסיפים פרמטר authenticators להערה, ומגדירים אותו לערך {EspAuthenticator.class}.
    • מוסיפים פרמטר issuers שמכיל @ApiIssuer.
    • מוסיפים פרמטר issuerAudiences שמכיל @ApiIssuerAudience, שמוגדר למונפק של חשבון השירות ולקהל שלכם.

    לדוגמה:

    @Api(
        name = "echo",
        version = "v1",
        authenticators = {EspAuthenticator.class},
        issuers = {
            @ApiIssuer(
                name = "serviceAccount",
                issuer = "YOUR_SERVICE_ACCOUNT_EMAIL",
                jwksUri = "https://www.googleapis.com/robot/v1/metadata/x509/YOUR_SERVICE_ACCOUNT_EMAIL")
        },
        issuerAudiences = {
            @ApiIssuerAudience(name = "serviceAccount", audiences = "YOUR_AUDIENCE")
        })
    
    • מחליפים את echo בשם ה-API.
    • מחליפים את v1 בגרסת ה-API.
    • מחליפים את YOUR_SERVICE_ACCOUNT_EMAIL בכתובת האימייל בחשבון השירות.
    • מחליפים את YOUR_AUDIENCE בערך שבשדה aud שנשלח על ידי שירות הקריאה.
  2. בקוד ההטמעה של ה-API, מייבאים את Users:

    import com.google.api.server.spi.auth.common.User;
    
  3. בכל שיטת API שבה רוצים לבדוק אם האימות תקין, צריך לבדוק אם יש User תקין. אם אין כזה, צריך להפעיל חריגה, כמו שמוצג בהגדרת שיטת הדוגמה הזו:

    @ApiMethod(httpMethod = ApiMethod.HttpMethod.GET)
    public Email getUserEmail(User user) throws UnauthorizedException {
      if (user == null) {
        throw new UnauthorizedException("Invalid credentials");
      }
    
      Email response = new Email();
      response.setEmail(user.getEmail());
      return response;
    }
    
  4. פורסים את ה-API. צריך לפרוס מחדש את ה-API בכל פעם שמוסיפים לקוחות חדשים.