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:
- Buka Google Auth Platform
- Pilih atau Buat Project untuk aplikasi Anda
- Klik Audiens di menu
- Pastikan Status publikasi adalah Dalam produksi
- Klik Pusat Verifikasi di menu
Pastikan Status Verifikasi adalah Terverifikasi.
Untuk mempelajari lebih lanjut, buka Pusat Bantuan Verifikasi Aplikasi OAuth.
Untuk mengaktifkan klaim auth_time:
- Buka Google Auth Platform
- Pilih atau Buat Project untuk aplikasi Anda
- Klik Setelan di menu
- 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_timeterbaru 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.