Sunting: Setelah memposting ini, saya menyadari bahwa jawabannya hampir sama persis dengan yang diberikan oleh Ali.S (sedikit berbeda tetapi keseluruhan pendekatannya sama.) Awalnya dimulai sebagai sesuatu yang sangat berbeda.
Metode ini mengasumsikan bahwa semua komunikasi ditahan melalui serangkaian terowongan yang aman. Bagaimana Anda mencapai ini tidak masalah. Saya akan menyarankan TLS, tapi itu hanya saya.
- Client => Server Game Klien terhubung ke server game dan memulai sesi login.
- Game Server => Server Auth Server game terhubung ke server auth dan meminta token ID sesi dari server auth. Koneksi ini tetap terbuka untuk mendengarkan keberhasilan / kegagalan login.
- Server Game => Klien Token ID sesi dikirim kembali ke klien.
- Klien => Server Auth Klien mengirim ID sesi ke server auth bersama dengan nama pengguna dan kata sandi pengguna, dan beberapa informasi tentang server (IP, kunci publik TLS, dll. Lihat catatan kaki)
- Auth Server => Server Game Server auth kemudian mengirimkan informasi tentang login ke server game (status keberhasilan, nama pengguna, statistik, dll.) Menggunakan ID sesi yang disediakan oleh klien.
- Server Game => Klien Server game memberi tahu klien bahwa auth berhasil, dan membiarkannya masuk.
- Semua koneksi kecuali klien awal ke koneksi server game sekarang dirobohkan.
Atau, Anda dapat memberikan port khusus untuk server game untuk mendengarkan info masuk. Jika Anda memilih rute ini, maka alirannya akan terlihat seperti ini:
- Klien => Server Auth Klien mengirim nama pengguna, kata sandi, dan IP server ke server auth.
- Auth Server => Server Game + Klien Jika login berhasil, server auth mengirimkan token unik ke server game dan klien. Kirim IP klien ke server game juga, sehingga token tidak dapat dicuri.
- Client => Server Game Klien kemudian mengirimkan token ke server game, yang kemudian diverifikasi dan dihapus di server game. Server game kemudian mengizinkan klien masuk.
Pendekatan kedua ini akan membuat implementasi keseluruhan sedikit lebih mudah.
Catatan kaki:
Alasan saya menentukan bahwa beberapa informasi harus dikirim tentang server game ke server auth adalah untuk memperkeras proses terhadap spoofs. Server dapat memverifikasi informasi untuk memastikan bahwa itu mengotorisasi koneksi yang diharapkan pemain.
ID sesi tidak harus aman secara kriptografis, meskipun itu akan membuat koneksi spoofing menjadi lebih sulit jika memang demikian.
Jika Anda memilih untuk pergi dengan rute TLS, Anda dapat mengatur server penandatanganan yang menandatangani semua sertifikat yang digunakan oleh infrastruktur Anda, dan menambahkannya sebagai CA tepercaya dalam perangkat lunak klien / server. Selama Anda tidak membiarkan sertifikat penandatanganan Anda longgar, Anda akan dapat memberikan beberapa otentikasi yang layak.
Demi memitigasi serangan DoS, buat koneksi habis setelah 20 detik atau kurang. Jika berlangsung lebih lama dari itu, maka ada sesuatu yang salah dan Anda tidak perlu menunggu 3 menit menunggu koneksi ke timeout sendiri.