Mit Dienstkonto authentifizieren

Vorbereitung

Folgende Voraussetzungen sollten erfüllt sein:

Authentifizierung konfigurieren

So authentifizieren Sie sich mit einem Dienstkonto:

  1. Fügen Sie Folgendes in Ihre @Api- oder Methoden-Annotation ein:

    • Fügen Sie der Annotation einen authenticators-Parameter an, der auf den Wert {EspAuthenticator.class} festgelegt ist.
    • Ergänzen Sie einen issuers-Parameter, der ein @ApiIssuer enthält.
    • Fügen Sie einen issuerAudiences-Parameter an, der ein auf den Dienstkontoaussteller und Ihre Zielgruppe festgelegtes @ApiIssuerAudience enthält.

    Beispiel:

    @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")
        })
    
    • Ersetzen Sie echo durch den Namen der API.
    • Ersetzen Sie v1 durch die API-Version.
    • Ersetzen Sie YOUR_SERVICE_ACCOUNT_EMAIL durch die E-Mail-Adresse Ihres Dienstkontos.
    • Ersetzen Sie YOUR_AUDIENCE durch den vom aufrufenden Dienst gesendeten Wert im Feld aud.
  2. Importieren Sie Users in den API-Implementierungscode:

    import com.google.api.server.spi.auth.common.User;
    
  3. Prüfen Sie in jeder API-Methode, mit der Sie eine ordnungsgemäße Authentifizierung gewährleisten möchten, ob ein gültiger User vorhanden ist. Wenn dies nicht der Fall ist, geben Sie, wie in der folgenden Methodendefinition beispielhaft gezeigt, eine Ausnahme zurück:

    @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. Stellen Sie die API bereit. Die API muss bei jedem neu hinzugefügten Client neu bereitgestellt werden.