Meskipun jawaban Philipp sangat bagus, ada cara yang sedikit berbeda yang tidak memerlukan koneksi antara server login dan server game, yang berguna jika koneksi seperti itu sulit.
- Ketika pengguna berhasil mengautentikasi pada server masuk, mereka akan dikirim alamat server permainan dan token masuk seperti di atas. Namun token ini terdiri dari 2 bagian: waktu pada server login, dan hash nomor itu ditambah nama pengguna mereka, alamat IP mereka, alamat IP atau ID dari server permainan, dan kunci rahasia yang hanya Anda yang tahu.
- Klien mencoba masuk ke server game yang disediakan dengan mengirimkan token ini. Server membentuk hash yang sama seperti sebelumnya, berdasarkan informasi di token masuk ditambah alamat IP / ID dan kunci rahasia. Jika hash ini cocok dengan yang ada di token, Anda tahu pemain diautentikasi dengan benar. Kemudian periksa tanggal tidak terlalu lama (mis. Lebih dari 1 menit).
Ini berfungsi karena:
- Tidak dapat disalin dan digunakan kembali karena tanggal akan kedaluwarsa.
- Itu tidak dapat dibangun tanpa login baru tanpa mengetahui kunci rahasia.
- Ini tidak dapat dengan mudah dicegat oleh orang lain (mis. Dengan sniffer paket) dan digunakan karena alamat IP asli digunakan untuk membangunnya.
- Itu tidak dapat digunakan untuk akun yang berbeda karena nama pengguna merupakan bagian dari hash.
- Itu tidak dapat digunakan untuk login bersamaan pada server game yang berbeda karena ID / alamat IP server merupakan bagian dari hash.
Atau lebih sederhananya, hash memastikan bahwa hampir tidak mungkin bagi pengirim untuk memalsukan token login mereka sehingga informasi dalam token dapat dipercaya.
Seperti halnya hashing yang berorientasi pada keamanan, gunakan fungsi hash terbaik yang bisa Anda dapatkan - saat ini orang-orang tampaknya menyukai bcrypt, PBKDF2, dan scrypt - dan memastikan kunci rahasia Anda sangat panjang sehingga membuat reproduksi brute force kurang praktis.