Mengautentikasi pengguna

Halaman ini menjelaskan cara menambahkan dukungan di API Anda untuk autentikasi pengguna dari aplikasi klien menggunakan Framework Cloud Endpoints. Perlu diperhatikan bahwa klien Android dan JavaScript saat ini didukung.

Framework Endpoint mendukung autentikasi pengguna dari aplikasi klien yang menggunakan salah satu metodologi berikut:

Apa pun metode autentikasi yang digunakan, di setiap metode API tempat Anda ingin memeriksa autentikasi yang tepat, Anda harus memeriksa User yang valid seperti yang dijelaskan di bagian berikut:

Prasyarat

Halaman ini mengasumsikan bahwa Anda telah:

Mengautentikasi dengan Firebase Auth

Untuk mendukung panggilan dari klien yang menggunakan Firebase Auth:

  1. Jika Anda belum melakukannya, buat project Firebase. Project Firebase adalah project Google Cloud Console yang menggunakan layanan Firebase. Untuk mengetahui informasi selengkapnya, baca Apa yang dimaksud dengan project Firebase? dan dokumentasi Firebase.

  2. Tambahkan kode berikut ke @Api atau anotasi metode:

    • Tambahkan parameter authenticators ke anotasi Anda, yang ditetapkan ke nilai {EspAuthenticator.class}.
    • Tambahkan parameter issuers yang berisi @ApiIssuer yang ditetapkan ke Firebase.
    • Tambahkan parameter issuerAudiences yang berisi @ApiIssuerAudience yang ditetapkan ke Firebase dan project ID Anda.

    Contoh:

    @Api(
        name = "YOUR_API_NAME",
        version = "VERSION_NUMBER",
        authenticators = {EspAuthenticator.class},
        issuers = {
            @ApiIssuer(
                name = "firebase",
                issuer = "https://securetoken.google.com/YOUR_PROJECT_ID",
                jwksUri = "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com")
        },
        issuerAudiences = {
            @ApiIssuerAudience(name = "firebase", audiences = "YOUR_PROJECT_ID")
        })
    
    • Ganti YOUR_API_NAME dengan nama API Anda.
    • Ganti VERSION_NUMBER dengan versi API Anda, misalnya, v1.
    • Ganti kedua instance YOUR_PROJECT_ID dengan project ID Firebase Anda.
  3. Dalam kode implementasi API Anda, impor Users:

    import com.google.api.server.spi.auth.common.User;
    
  4. Di setiap metode API tempat Anda ingin memeriksa autentikasi yang tepat, periksa User yang valid dan tampilkan pengecualian jika tidak ada, seperti yang ditunjukkan dalam contoh definisi metode berikut:

    @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;
    }
    
  5. Deploy ulang API setiap kali Anda menambahkan klien baru.

Menambahkan autentikasi Firebase ke klien

Anda dapat menambahkan autentikasi Firebase ke kode seperti yang dijelaskan dalam dokumentasi Firebase. Klien harus memiliki project Google Cloud yang terkait dengannya, dan project ID harus tercantum dalam konfigurasi penerbit Firebase API seperti yang ditunjukkan di bagian sebelumnya.

Mengautentikasi dengan Auth0

Untuk mendukung panggilan dari klien yang menggunakan Auth0:

  1. Tambahkan kode berikut ke @Api atau anotasi metode:

    • Tambahkan parameter authenticators ke anotasi Anda, yang ditetapkan ke nilai {EspAuthenticator.class}.
    • Tambahkan parameter issuers yang berisi @ApiIssuer yang ditetapkan ke Auth0.
    • Tambahkan parameter issuerAudiences yang berisi @ApiIssuerAudience yang ditetapkan ke Auth0 dan client ID Auth0 Anda.

    Contoh:

    @Api(
        name = "YOUR_API_NAME",
        version = "VERSION_NUMBER",
        authenticators = {EspAuthenticator.class},
        issuers = {
            @ApiIssuer(
                name = "auth0",
                issuer = "https://YOUR_ACCOUNT_NAME.auth0.com/",
                jwksUri = "https://YOUR_ACCOUNT_NAME.auth0.com/.well-known/jwks.json")
         },
         issuerAudiences = {
             @ApiIssuerAudience(name = "auth0", audiences = "AUTH0_CLIENT_ID")
        })
    
    • Ganti YOUR_API_NAME dengan nama API Anda.
    • Ganti VERSION_NUMBER dengan versi API Anda, misalnya, v1.
    • Ganti YOUR_ACCOUNT_NAME dengan nama akun Auth0 yang digunakan untuk klien.
    • Ganti AUTH0_CLIENT_ID dengan ID yang ingin Anda gunakan untuk klien.
  2. Dalam kode implementasi API Anda, impor Users:

    import com.google.api.server.spi.auth.common.User;
    
  3. Di setiap metode API tempat Anda ingin memeriksa autentikasi yang tepat, periksa User yang valid dan tampilkan pengecualian jika tidak ada, seperti yang ditunjukkan dalam contoh definisi metode berikut:

    @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. Deploy ulang API setiap kali Anda menambahkan klien baru.

Menambahkan autentikasi Auth0 ke klien

Anda dapat menambahkan autentikasi Auth0 ke kode Anda seperti yang dijelaskan dalam dokumentasi Auth0. Klien harus tercantum dalam konfigurasi penerbit Auth0 API.

Mengautentikasi dengan token ID Google

Untuk mendukung panggilan dari klien yang melakukan autentikasi menggunakan token ID Google:

  1. Dapatkan client ID OAuth 2 untuk setiap aplikasi klien. Pemilik aplikasi klien harus membuat client ID dari Konsol Google Cloud. Untuk mengetahui petunjuknya, lihat Membuat client ID.

  2. Tambahkan entri clientIds yang berisi client ID untuk setiap aplikasi klien yang Anda beri akses, dan juga entri audiences untuk setiap klien Android, dalam anotasi @Api.

    Contoh:

    @Api(
       name = "YOUR_API_NAME",
       version = "VERSION_NUMBER",
       clientIds = {"YOUR_CLIENT_ID"},
       audiences = {"YOUR_CLIENT_ID"}
    )
    
    • Ganti YOUR_API_NAME dengan nama API Anda.
    • Ganti VERSION_NUMBER dengan versi API Anda, misalnya, v1.
    • Ganti YOUR_CLIENT_ID dengan client ID OAuth 2 yang dibuat dalam project aplikasi klien.
  3. Dalam kode implementasi API Anda, impor Users:

    import com.google.api.server.spi.auth.common.User;
    
  4. Di setiap metode API tempat Anda ingin memeriksa autentikasi yang tepat, periksa User yang valid dan tampilkan pengecualian jika tidak ada, seperti yang ditunjukkan dalam contoh definisi metode berikut:

    @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;
    }
    
  5. Deploy ulang API setiap kali Anda menambahkan klien baru.

Menambahkan autentikasi token ID Google ke klien

Untuk mengetahui informasi tentang cara menambahkan kode autentikasi ke klien, lihat referensi berikut:

Mengirim JWT di klien Anda

Jika Anda menggunakan JWT di klien untuk mengirim permintaan terautentikasi ke API, JWT harus berada di header otorisasi permintaan HTTP. JWT harus memiliki klaim yang diperlukan berikut:

  • iss
  • sub
  • aud
  • iat
  • exp

Langkah selanjutnya

Untuk mengetahui informasi latar belakang tentang autentikasi pengguna dan perbedaannya dengan otorisasi kunci API, lihat Kapan dan mengapa menggunakan kunci API.