Paket keamanan

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.

Sesi

Permintaan autentikasi oleh aplikasi menampilkan Token ID. Misalnya, saat tombol Login dengan Google ditekan, Token ID akan ditampilkan ke aplikasi klien atau server Android, iOS, atau Web yang menampilkan tombol tersebut.

Autentikasi untuk login ke Akun Google adalah peristiwa yang berbeda dan terpisah. Klaim yang ditampilkan dalam Token ID mewakili peristiwa ini. Misalnya, waktu dan metode autentikasi yang digunakan untuk login ke Akun Google.

Ada dua momen autentikasi dan dua sesi pengguna:

  • Sesi Pengguna <-> Google Dibuat saat pengguna login ke Akun Google-nya. Google mengelola siklus proses dan keamanan sesi ini. Klaim auth_time dan amr memberikan insight kepada Anda tentang sesi ini.
  • Sesi Pengguna <-> Aplikasi Anda Dibuat setelah pengguna login ke aplikasi Anda, yang sering kali dimulai menggunakan Login dengan Google. Aplikasi Anda mengelola sesi ini menggunakan klaim untuk meningkatkan keputusan pengelolaan sesi dan akun.

Pengguna sering berinteraksi dengan layanan Google di beberapa perangkat, seperti ponsel, komputer desktop, smart display, atau TV. Login di setiap platform atau perangkat akan membuat sesi yang berbeda. Untuk login web, sesi dibuat antara browser tertentu dan Google; perhatikan bahwa mode Penjelajahan Pribadi dan Samaran membuat sesi terpisah dan terisolasi. Oleh karena itu, satu Akun Google dapat memiliki beberapa sesi berbeda yang aktif secara bersamaan di berbagai browser dan perangkat. Untuk mengetahui detail tambahan, lihat Melihat perangkat dengan akses akun.

Status Akun Google

Peristiwa umum siklus proses Akun Google adalah:

Fitur Paket Keamanan yang dijelaskan dalam panduan ini berlaku untuk akun yang aktif atau dinonaktifkan, tetapi tidak untuk peristiwa pembuatan atau penghapusan Akun Google.

Google dapat menonaktifkan akun kapan saja, karena beberapa alasan. Lihat Akun Anda dinonaktifkan. Jika hal ini terjadi, sesi Google aktif akan dihentikan dan peristiwa RISC akan dikirim oleh layanan Perlindungan Lintas Akun Google. Akun yang dinonaktifkan diblokir untuk menggunakan Login dengan Google, yang berarti token ID tidak pernah dikeluarkan sehingga tidak dapat digunakan untuk memantau akun pengguna yang dinonaktifkan.

Meskipun menerima peristiwa Perlindungan Lintas Akun (RISC) bersifat opsional, peristiwa ini berfungsi sebagai sinyal penting untuk mengelola sesi antara pengguna dan aplikasi Anda, serta apakah. Petunjuk tentang cara menerapkan RISC dan merespons peristiwa dijelaskan dalam Melindungi akun pengguna dengan Perlindungan Lintas Akun.

Penyiapan

Untuk menerima klaim tambahan, aplikasi Anda harus dipublikasikan, diverifikasi, dan fitur paket keamanan diaktifkan. Mulailah dengan mengonfirmasi bahwa aplikasi Anda dipublikasikan dan diverifikasi:

  1. Buka Google Auth Platform
  2. Pilih atau Buat Project untuk aplikasi Anda
  3. Klik Audiens dan konfirmasi Status publikasi adalah Dalam produksi
  4. Klik Pusat Verifikasi dan konfirmasi Status Verifikasi adalah Diverifikasi

Selanjutnya, aktifkan klaim tambahan:

  1. Klik Setelan di menu
  2. Di bagian Setelan Lanjutan , pilih:
    • Klaim usia sesi untuk mengaktifkan auth_time
    • Klaim kekuatan autentikasi untuk mengaktifkan amr

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

Fitur yang didukung

Bagian ini menjelaskan fitur individual yang membentuk Paket Keamanan.

Referensi Metode Autentikasi

Referensi Metode Autentikasi (amr) adalah klaim OpenID Connect yang menjelaskan metode yang digunakan selama peristiwa autentikasi terakhir antara pengguna dan Google.

Dari nilai IANA.AMR yang memungkinkan, Google mendukung nilai berikut yang menunjukkan bahwa:

  • hwk kunci keamanan hardware digunakan
  • mfa Autentikasi Multi-faktor telah selesai
  • pwd Sandi digunakan
  • swk kunci software seperti Kunci Sandi digunakan
  • sms pesan SMS digunakan untuk verifikasi
  • tel panggilan telepon digunakan untuk verifikasi

Satu atau beberapa nilai ini ditampilkan sebagai array JSON string dalam klaim amr token ID.

Klaim amr disertakan dalam token ID hanya jika informasi tersedia tentang metode autentikasi yang digunakan. Klaim ini mungkin tidak ada meskipun diminta.

Pemilik Akun Google dapat memilih untuk mewajibkan Verifikasi 2 Langkah dan metode MFA yang akan digunakan. Jika Perlindungan Lanjutan diaktifkan di Akun Google, metode Verifikasi 2 Langkah yang kuat seperti kunci keamanan Titan (hwk) atau Kunci Sandi (swk) akan diperlukan. Dalam kedua situasi tersebut, nilai mfa akan ada jika lebih dari satu faktor digunakan selama login ke Akun Google.

Keberadaan mfa mengonfirmasi bahwa peristiwa autentikasi memenuhi persyaratan Google untuk Autentikasi Multi-faktor. Misalnya, autentikasi Akun Google dengan Sandi (pwd) dan Kunci Sandi (swk) akan menghasilkan klaim "amr": ["mfa", "pwd", "swk"].

Referensi ini memiliki informasi selengkapnya tentang keamanan akun dan autentikasi pengguna: Dapatkan keamanan akun terkuat Google dengan Program Perlindungan Lanjutan, Login dengan kunci sandi, bukan sandi, dan Menggunakan kunci keamanan untuk Verifikasi 2 Langkah.

Admin Workspace mengontrol kebijakan autentikasi untuk akun Workspace terkelola, dan dapat mewajibkan MFA atau penggunaan kunci keamanan. Lihat Ringkasan pengelolaan identitas Google dan Persyaratan autentikasi multi-faktor untuk Google Cloud perlindungan & kontrol Login untuk mengetahui informasi selengkapnya.

Waktu autentikasi

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 sangat berguna untuk aplikasi Anda karena memungkinkan Anda menentukan seberapa baru-baru ini pengguna telah login secara aktif 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 tambahan sebelum melakukan tindakan pengguna 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 adalah indikasi keaktualan, sedangkan nilai yang lebih lama menunjukkan stabilitas.

Untuk aplikasi web, kombinasi browser dan sistem operasi pengguna akan 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 dan update yang sesuai ke auth_time menjadi jarang. 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

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

Protokol OIDC

Saat menggunakan Platform OAuth secara langsung, minta auth_time dengan menambahkannya ke parameter permintaan claims opsional. Tetapkan nilai kolom id_token objek JSON klaim ke {"auth_time":{"essential":true}}. Demikian pula, tambahkan {"amr":{"essential":true}} ke claims untuk meminta amr:

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 },
            "amr": {"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 dan amr 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, amr",
      });
      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 dan amr.

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

Buat instance objek Claim berjenis auth_time dan amr, menggunakan setClaims untuk menambahkannya ke daftar 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),
           new Claim("amr", 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 dan amr secara opsional.

Aplikasi yang menggunakan ASWebAuthenticationSession akan mengupdate cookie bersama di seluruh perangkat. GIDSignIn menggunakan metode ini secara default di iOS 12 atau yang lebih baru dan macOS 10.15 atau yang lebih baru. Dalam skenario ini, pengguna yang login ke Akun Google-nya akan diautentikasi dan sesi akan disimpan di cookie bersama. Di sini, auth_time adalah autentikasi Google terakhir pengguna di perangkat, bukan hanya 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.

Untuk meminta amr, buat objek amrClaim dan tambahkan ke kumpulan claims.

Swift

Tambahkan kumpulan klaim ke metode GIDSignIn.sharedInstance.signIn:

let authTimeClaim = GIDClaim.authTime()
let amrClaim = GIDClaim.amr()
let claims = Set([authTimeClaim, amrClaim])

// 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];
GIDClaim *AMRClaim = [GIDClaim AMRClaim];
NSSet *claims = [NSSet setWithArray:@[authTimeClaim, AMRClaim]];

// 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

Jika klaim auth_time atau amr disertakan dalam permintaan, klaim tersebut akan ditampilkan dalam respons payload Token ID bersama dengan klaim standar lainnya seperti iss (penerbit), sub (subjek), aud (audiens), dan exp (waktu habis masa berlaku).

Klaim yang tidak ada kemungkinan disebabkan oleh aplikasi yang tidak diverifikasi atau setelan tambahan yang dinonaktifkan, yang merupakan setelan default. Ikuti petunjuk di Penyiapan untuk mengonfirmasi bahwa Client ID dan Aplikasi yang digunakan Diverifikasi dan klaim tambahan diaktifkan.

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.

Nilai klaim amr adalah array JSON string yang mewakili metode autentikasi yang digunakan selama peristiwa login Akun Google terakhir.

Berikut adalah contoh Token ID yang didekode yang menyertakan klaim auth_time dan amr:

{
  "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,
  "amr": ["mfa", "pwd", "tel"],
  "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.