Panduan ini menjelaskan kumpulan fitur yang menampilkan 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
- Konfirmasi bahwa Status publikasi adalah Dalam produksi
- Klik Pusat Verifikasi di menu
Konfirmasi bahwa 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 diautentikasi
dengan Google. Klaim ini adalah angka JSON yang mewakili jumlah detik yang telah berlalu sejak epoch Unix (1 Januari 1970, 00:00:00 UTC) dan merupakan waktu saat pengguna terakhir kali diautentikasi. Anggap saja klaim 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 berguna untuk aplikasi Anda karena memungkinkan Anda menentukan seberapa baru-baru ini pengguna telah aktif login ke Akun Google di perangkat atau browser yang mereka gunakan. Hal ini dapat sangat penting untuk tujuan keamanan seperti:
Membuat keputusan yang tepat tentang apakah aplikasi Anda harus mengeluarkan tantangan autentikasi step-up 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 adalah indikasi keaktualan, sedangkan nilai yang lebih lama menunjukkan stabilitas.
Untuk aplikasi web, kombinasi browser dan sistem operasi pengguna membentuk 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.
Sering kali hal ini merupakan indikasi pengguna yang aktif dan terlibat, serta dapat diartikan sebagai sinyal risiko yang lebih rendah.
Di platform seluler seperti Android, pengguna biasanya login langsung ke perangkat mereka menggunakan metode biometrik seperti sidik jari atau pemindaian wajah dan PIN atau pola khusus perangkat. Aplikasi dan platform seluler sering menggunakan metode autentikasi berbasis platform ini, bukan membuat sesi baru dengan Google, sehingga login Akun Google jarang terjadi dan pembaruan yang sesuai ke auth_time juga jarang terjadi. Jadi, di sini nilai auth_time terbaru dapat menandakan perubahan pada sesi Akun Google yang berjalan lama dan dengan demikian meningkatkan risiko.
Sinyal kepercayaan adalah subjek yang rumit. auth_time diharapkan dapat 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 kla auth_timeim 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 menambahkannya ke 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.
iOS
Login dengan Google SDK untuk iOS menambahkan objek authTimeClaimdan parameter claims ke class GIDSignIn yang digunakan untuk meminta auth_time secara opsional.
Aplikasi yang menggunakan ASWebAuthenticationSession memperbarui cookie jar bersama di seluruh perangkat. GIDSignIn menggunakan metode ini secara default di iOS 12 atau yang lebih baru dan macOS 12.16 atau yang lebih baru. Dalam skenario ini, pengguna yang login ke Akun Google-nya diautentikasi dan sesi disimpan di cookie jar bersama.
Di sini, auth_time adalah autentikasi Google terakhir pengguna di perangkat, bukan hanya di dalam aplikasi Anda.
SFSafariViewController, WKWebView, dan UIWebView beroperasi di sandbox terisolasi dalam aplikasi Anda. Hindari penggunaannya saat menggunakan auth_time. Di sini, auth_time adalah login terakhir pengguna ke aplikasi itu sendiri, karena nilainya selalu terbaru, sehingga kurang bermakna.
Untuk meminta auth_time, perbarui dependensi GoogleSignIn ke versi terbaru
dan buat objek authTimeClaim, lalu tambahkan ke kumpulan claims.
Swift
Tambahkan kumpulan klaim ke metode GIDSignIn.sharedInstance.signIn:
let authTimeClaim = GIDClaim.authTime() let claims = Set([authTimeClaim])// Start the sign-in process GIDSignIn.sharedInstance.signIn( withPresenting: rootViewController, claims: claims ) { signInResult, error in guard let result = signInResult else { print("Error signing in: (error?.localizedDescription ?? "No error description")") return } // If sign in succeeded, display the app's main content View print("ID Token: (result.user.idToken?.tokenString ?? "No token")") }
Objective-C
Tambahkan kumpulan klaim ke metode signInWithPresentingViewController:
GIDClaim *authTimeClaim = [GIDClaim authTimeClaim]; NSSet *claims = [NSSet setWithObject:authTimeClaim];// Include the claims set and start the sign-in process [GIDSignIn.sharedInstance signInWithPresentingViewController:self hint:nil claims:claims completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { // On success signInResult.user.idToken // contains the requested claims. }];
Lihat Mengintegrasikan Login dengan Google ke aplikasi iOS atau macOS 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 mewakili jumlah detik yang telah berlalu sejak epoch Unix (1 Januari 1970, 00:00:00 UTC) hingga waktu autentikasi pengguna terakhir terjadi. Berikut adalah contoh Token ID 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 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 berlalu.