Chỉnh sửa: Sau khi đăng bài này, tôi nhận ra đó gần như là câu trả lời chính xác được đưa ra bởi Ali.S (hơi khác một chút nhưng cách tiếp cận tổng thể là như nhau.) Nó bắt đầu như một thứ hoàn toàn khác.
Phương pháp này giả định rằng tất cả các thông tin liên lạc đang được tổ chức trên một loạt các đường hầm an toàn. Làm thế nào bạn đạt được điều này không quan trọng. Tôi muốn đề nghị TLS, nhưng đó chỉ là tôi.
- Máy khách => Máy chủ trò chơi Máy khách kết nối với máy chủ trò chơi và bắt đầu phiên đăng nhập.
- Máy chủ trò chơi => Máy chủ xác thực Máy chủ trò chơi kết nối với máy chủ xác thực và yêu cầu mã thông báo ID phiên từ máy chủ xác thực. Kết nối này được giữ mở để lắng nghe thành công / thất bại đăng nhập.
- Máy chủ trò chơi => Máy khách Mã thông báo ID phiên được gửi lại cho máy khách.
- Máy khách => Máy chủ xác thực Máy khách gửi ID phiên tới máy chủ xác thực cùng với tên người dùng và mật khẩu của người dùng và một số thông tin về máy chủ (IP, khóa công khai TLS, v.v. Xem chú thích)
- Auth Server => Game Server Máy chủ auth sau đó gửi thông tin về thông tin đăng nhập đến máy chủ trò chơi (trạng thái thành công, tên người dùng, số liệu thống kê, v.v.) bằng ID phiên do khách hàng cung cấp.
- Máy chủ trò chơi => Máy khách Máy chủ trò chơi cho khách hàng biết rằng xác thực đã thành công và cho phép họ tham gia.
- Tất cả các kết nối ngoại trừ kết nối máy khách ban đầu đến máy chủ trò chơi hiện bị phá bỏ.
Ngoài ra, bạn có thể cung cấp cho các máy chủ trò chơi một cổng chuyên dụng để nghe thông tin đăng nhập. Nếu bạn chọn tuyến đường này, thì luồng sẽ như thế này:
- Máy khách => Máy chủ Auth Máy khách gửi tên người dùng, mật khẩu và IP máy chủ đến máy chủ xác thực.
- Auth Server => Game Server + Client Nếu đăng nhập thành công, máy chủ auth sẽ gửi một mã thông báo duy nhất đến máy chủ và máy khách trò chơi. Gửi IP của khách hàng đến máy chủ trò chơi để mã thông báo không thể bị đánh cắp.
- Máy khách => Máy chủ trò chơi Máy khách sau đó gửi mã thông báo đến máy chủ trò chơi, sau đó nó được xác minh và xóa trên máy chủ trò chơi. Máy chủ trò chơi sau đó cho phép khách hàng vào.
Cách tiếp cận thứ hai này sẽ làm cho việc thực hiện tổng thể dễ dàng hơn một chút.
Chú thích:
Lý do tôi xác định rằng một số thông tin nên được gửi về máy chủ trò chơi đến máy chủ xác thực là để tăng cường quá trình chống lại các trò giả mạo. Máy chủ có thể xác minh thông tin để đảm bảo rằng nó cho phép kết nối mà người chơi mong đợi.
ID phiên sẽ không phải bảo mật bằng mật mã, mặc dù điều đó sẽ khiến việc kết nối giả mạo trở nên khó khăn hơn nếu có.
Nếu bạn chọn đi tuyến đường TLS, bạn có thể thiết lập máy chủ ký tên ký tất cả các certs được sử dụng bởi cơ sở hạ tầng của bạn và thêm nó dưới dạng CA đáng tin cậy trong phần mềm máy khách / máy chủ. Miễn là bạn không để chứng chỉ ký của mình bị lỏng lẻo, bạn sẽ có thể cung cấp một số xác thực hợp lệ.
Để giảm thiểu các cuộc tấn công DoS, hãy thực hiện thời gian chờ kết nối sau 20 giây hoặc ít hơn. Nếu nó tồn tại lâu hơn thế, thì có gì đó không ổn và bạn không cần đợi 3 phút để chờ kết nối hết thời gian chờ.