Mengautentikasi pengguna

Halaman ini menjelaskan cara menambahkan dukungan di API Anda untuk autentikasi pengguna dari aplikasi klien menggunakan Framework Cloud Endpoints. Perhatikan 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 Anda gunakan, 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:

Melakukan autentikasi dengan Firebase Auth

Untuk mendukung panggilan dari klien yang menggunakan Firebase Auth:

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

  2. Tambahkan yang berikut ke @Api atau anotasi metode Anda:

    • Tambahkan parameter authenticators ke anotasi Anda, yang ditetapkan ke nilai {EspAuthenticator.class}.
    • Tambahkan parameter issuers yang berisi set @ApiIssuer ke Firebase.
    • Tambahkan parameter issuerAudiences yang berisi set @ApiIssuerAudience 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 penerapan API, 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 berikan pengecualian jika tidak ada, seperti yang ditunjukkan dalam definisi metode contoh ini:

    @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 Google Cloud project yang terkait dengannya, dan ID project harus tercantum dalam konfigurasi penerbit Firebase API seperti yang ditunjukkan di bagian sebelumnya.

Melakukan autentikasi dengan Auth0

Untuk mendukung panggilan dari klien yang menggunakan Auth0:

  1. Tambahkan yang berikut ke @Api atau anotasi metode Anda:

    • Tambahkan parameter authenticators ke anotasi Anda, yang ditetapkan ke nilai {EspAuthenticator.class}.
    • Tambahkan parameter issuers yang berisi set @ApiIssuer ke Auth0.
    • Tambahkan parameter issuerAudiences yang berisi set @ApiIssuerAudience ke Auth0 dan ID klien 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 Anda.
  2. Dalam kode penerapan API, 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 berikan pengecualian jika tidak ada, seperti yang ditunjukkan dalam definisi metode contoh ini:

    @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 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 ID klien OAuth 2 untuk setiap aplikasi klien. Pemilik aplikasi klien harus membuat ID klien dari konsol Google Cloud . Untuk mengetahui petunjuknya, lihat Membuat ID klien.

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

    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 di project aplikasi klien.
  3. Dalam kode penerapan API, 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 berikan pengecualian jika tidak ada, seperti yang ditunjukkan dalam definisi metode contoh ini:

    @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 artikel berikut:

Mengirim JWT di klien Anda

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

  • iss
  • sub
  • aud
  • iat
  • exp

Langkah berikutnya

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