Paket keamanan

Panduan ini menjelaskan kumpulan fitur yang memberikan sinyal kepercayaan tambahan tentang Akun Google. Sinyal kepercayaan ini membantu sistem pengelolaan akun Anda membuat keputusan berbasis risiko selama pendaftaran, pembuatan akun, dan selanjutnya untuk pengguna yang kembali.

Penyiapan

Untuk menerima klaim tambahan, aplikasi Anda harus dipublikasikan, diverifikasi, dan fitur paket keamanan diaktifkan.

Untuk mengonfirmasi bahwa aplikasi Anda dipublikasikan dan diverifikasi:

  1. Buka Google Auth Platform
  2. Pilih atau Buat Project untuk aplikasi Anda
  3. Klik Audiens di menu
  4. Pastikan Status publikasi adalah Dalam produksi
  5. Klik Pusat Verifikasi di menu
  6. Pastikan Status Verifikasi adalah Terverifikasi.

    Untuk mempelajari lebih lanjut, buka Pusat Bantuan Verifikasi Aplikasi OAuth.

Untuk mengaktifkan klaim auth_time:

  1. Buka Google Auth Platform
  2. Pilih atau Buat Project untuk aplikasi Anda
  3. Klik Setelan di menu
  4. Di bagian Setelan Lanjutan, pilih Klaim usia sesi untuk mengaktifkan auth_time.

Fitur yang didukung

Bagian ini menjelaskan fitur individual yang membentuk Paket Keamanan.

auth_time

Klaim auth_time adalah bagian standar dari protokol OpenID Connect yang memberikan informasi tentang kapan Pengguna Akhir terakhir kali melakukan autentikasi dengan Google. Ini adalah angka JSON yang merepresentasikan jumlah detik yang telah berlalu sejak epoch Unix (1 Januari 1970, 00.00.00 UTC) dan merupakan waktu saat terakhir kali pengguna melakukan autentikasi. Anggap saja ini sebagai stempel waktu yang menunjukkan peristiwa login terakhir pengguna ke Akun Google-nya dari perangkat atau browser saat ini. Klaim ini disertakan dalam Token ID, yang merupakan Token Web JSON (JWT) yang berisi informasi terverifikasi tentang autentikasi dan pengguna.

Klaim auth_time berharga untuk aplikasi Anda karena memungkinkan Anda menentukan seberapa baru pengguna telah login secara aktif ke Akun Google di perangkat atau browser yang mereka gunakan. Hal ini dapat menjadi sangat penting untuk tujuan keamanan seperti:

  • Membuat keputusan yang tepat tentang apakah aplikasi Anda harus mengeluarkan tantangan autentikasi tambahan sebelum melakukan tindakan pengguna yang sensitif seperti menghapus akun, mengubah metode kontak akun, atau melakukan pembayaran. Google tidak mendukung permintaan autentikasi ulang Akun Google.

  • Menggunakan keaktualan dan stabilitas sesi Akun Google pengguna sebagai sinyal kepercayaan. Secara umum, nilai auth_time terbaru menunjukkan keaktualan, sedangkan nilai yang lebih lama menunjukkan stabilitas.

Untuk aplikasi web, kombinasi browser dan sistem operasi pengguna merupakan sesi setelah pengguna login ke Akun Google-nya. Secara terpisah, situs Anda juga mempertahankan sesi pengguna yang terpisah. Nilai auth_time yang lebih baru menunjukkan bahwa pengguna baru-baru ini login ke Akun Google-nya. Hal ini sering kali menunjukkan pengguna yang aktif dan berinteraksi, serta dapat ditafsirkan sebagai sinyal risiko yang lebih rendah.

Di platform seluler seperti Android, pengguna biasanya login langsung ke perangkat mereka menggunakan metode biometrik seperti pemindaian sidik jari atau wajah dan pembuka kunci PIN atau pola khusus perangkat. Aplikasi dan platform seluler sering kali menggunakan metode autentikasi berbasis platform ini, bukan membuat sesi baru dengan Google, sehingga menyebabkan login Akun Google yang jarang dan pembaruan yang sesuai ke auth_time. Jadi, nilai auth_time terbaru di sini dapat menandakan perubahan pada sesi Akun Google yang berjalan lama dan dengan demikian meningkatkan risiko.

Sinyal kepercayaan adalah subjek yang rumit. auth_time diharapkan digunakan bersama dengan sinyal lain seperti apakah autentikasi multi-faktor (MFA) diaktifkan, metode autentikasi yang digunakan, dan durasi sesi pengguna antara aplikasi dan platform Anda.

Permintaan auth_time

Metode spesifik yang digunakan untuk meminta klaim auth_time berbeda-beda menurut API yang digunakan, tetapi setiap API menyertakan parameter claims opsional untuk meminta auth_time.

Protokol OIDC

Saat menggunakan Platform OAuth secara langsung, minta auth_time dengan menambahkannya ke parameter permintaan klaim opsional. Tetapkan nilai kolom id_token objek JSON klaim ke {"auth_time":{"essential":true}}. Misalnya,

https://accounts.google.com/o/oauth2/v2/auth?
response_type=id_token&
client_id=YOUR_CLIENT_ID&
scope=openid email profile&
redirect_uri=https://example.com/user-login&
nonce=123-456-7890&
claims={"id_token":{"auth_time":{"essential":true}}}

Lihat OpenID Connect untuk mengetahui informasi selengkapnya.

GIS untuk Web

Library Login dengan Google untuk Web memiliki dua API: HTML dan JavaScript untuk meminta klaim tambahan. Misalnya, minta auth_time menggunakan JavaScript API:

<html>
<body>
  <script src="https://accounts.google.com/gsi/client" async></script>
  <script>
    window.onload = function () {
      google.accounts.id.initialize({
        client_id: "YOUR_WEB_CLIENT_ID",
        callback: function(rsp) { console.log(rsp.credential); },
        essential_claims: "auth_time",
      });
      google.accounts.id.renderButton(
        document.getElementById("buttonDiv"),
        { type: "standard", size: "large" }
      );
    }
  </script>
  <div id="buttonDiv"></div>
</body>
</html>

Lihat Login dengan Google untuk Web untuk mengetahui informasi selengkapnya.

GIS untuk Android

Metode setClaims dan objek Claim digunakan untuk meminta auth_time.

Perbarui dependensi build Anda untuk menggunakan library androidx.credentials:credentials-play-services-auth dan com.google.android.libraries.identity.googleid:googleid versi terbaru.

Buat instance objek Claim berjenis auth_time, menggunakan setClaims untuk menambahkan opsi login:

val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
    .setAutoSelectEnabled(true)
    .setFilterByAuthorizedAccounts(true)
    .setServerClientId(WEB_CLIENT_ID)
    .setNonce("NONCE")
    .setClaims(ImmutableList.of(new Claim("auth_time", true)))
    .build()

Lihat Mengautentikasi pengguna dengan Login dengan Google untuk mengetahui informasi selengkapnya.

Respons auth_time

Jika klaim auth_time disertakan dalam permintaan, klaim tersebut akan muncul dalam respons payload Token ID bersama dengan klaim standar lainnya seperti iss (penerbit), sub (subjek), aud (audiens), dan exp (waktu habis masa berlaku). Nilai klaim auth_time adalah angka JSON yang merepresentasikan jumlah detik yang telah berlalu sejak epoch Unix (1 Januari 1970, 00.00.00 UTC) hingga waktu autentikasi pengguna terakhir terjadi. Berikut adalah contoh ID Token yang didekode yang menyertakan klaim auth_time:

{
  "iss": "https://accounts.google.com",
  "azp": "YOUR_CLIENT_ID",
  "aud": "YOUR_CLIENT_ID",
  "sub": "117726431651943698600",
  "email": "alice@example.com",
  "email_verified": true,
  "nonce": "123-456-7890",
  "auth_time": 1748875426,
  "nbf": 1748880889,
  "name": "Elisa Beckett",
  "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c",
  "given_name": "Elisa",
  "family_name": "Beckett",
  "iat": 1748881189,
  "exp": 1748884789,
  "jti": "8b5d7ce345787d5dbf14ce6e08a8f88ee8c9b5b1"
}

Token ID juga berisi klaim iat (dikeluarkan pada), yang menunjukkan waktu JWT dikeluarkan. Dengan membandingkan klaim iat dan auth_time, Anda dapat menentukan waktu yang telah berlalu sejak autentikasi terakhir pengguna relatif terhadap waktu pembuatan Token ID tertentu. Misalnya, jika iat adalah 1748881189 dan auth_time adalah 1748875426, perbedaannya adalah 5763 detik, yang mewakili 1 jam, 36 menit, dan 3 detik waktu yang telah berlalu.