小さなサーバー クライアント プログラム用のログイン/認証システムを実装しています。私はこれをどのように行うべきか疑問に思っており、いつものように Stack Overflow から素晴らしいヒントやアドバイスを得たいと思っていました。これが私がそれをするだろうと想像する方法です。
- クライアントがサーバーに接続します。
- サーバーは「トークン」をクライアントに送信します(おそらく時間に基づいて)
- クライアントは、トークンとともに、ユーザー名と sha1 で暗号化されたパスワードを返します。
- サーバーはそれらを受け取り、サーバー側データベースの資格情報に対してユーザーを認証します。
- これでトークンが検証され、ユーザーはトークンを使用してサインインします。
これはまったく安全な方法ですか?クライアントもシリアルキーなどを送信してシリアル/トークンペアを形成し、別のクライアントが同じトークンを偽造できないようにしました(トークンはサーバー側で生成されますが)。
私は実装を行うことができるので、実装の詳細は必要ありません。
私の質問は、むしろ2つの質問です。
- ソケットを使用してログイン/認証システムを実現するにはどのような方法がありますか
- クライアントからサーバーへの接続を保護する方法はありますか
- 編集: これは C++ の質問であるため、尋ねるのを忘れていました。暗号化/認証を支援できるライブラリはありますか?
セキュリティは私にとって問題なので、確実に正しく行いたいと思っています。
たぶん、いくつかの背景情報。これはゲーム サーバーであり、ユーザーは自分のアカウントでログインすると、「ロビー」に移動し、そこで「ワールド サーバー」を選択してプレイすることができます。ワールド サーバーは、同じネットワーク内の別のマシンで (おそらく) 実行されている別のプロセスです。
そのため、これにはセッションの概念が必要です。ユーザーがログインしてセッションが生成され、ログインサーバーがユーザーが選択したワールドサーバーにセッションを中継し、ワールドサーバーがユーザーが実際にログインしました。
クライアントはワールドサーバーへのセッションを確認する必要があると思いますが、それについては後で心配します。
ジェシー_