分散アーキテクチャで使用するシングルサインオンシステムを設計しようとしています。具体的には、クライアントのWebサイト(つまり、別のドメイン/サーバー/ネットワーク上のWebサイト)がユーザーが私の中央システムにアカウントを登録できるようにする方法を提供する必要があります。
したがって、ユーザーがクライアントのWebサイトでアクションを実行し、そのアクションがアカウントを必要とすると見なされた場合、クライアントはユーザーがメールを提供して新しいアカウントに登録できるページ(サイト/ドメイン上)を生成します。パスワード。
次に、クライアントはこの情報をWebサービスに送信する必要があります。Webサービスはアカウントを登録し、セッショントークンタイプの値を返します。
クライアントはパスワードをネットワーク経由で送信する前にハッシュする必要があり、ウェブサービスはhttpsを必要としますが、これは十分に安全であるとは思われず、可能な限り最も安全な方法でこれを実装する方法についてアドバイスが必要です。
他のいくつかの関連情報:
ヘルプやアドバイスをいただければ幸いです。
正確には何が必要ですか?真ん中の人がパスワードを読み取らないようにするには?真ん中の男がログオンできないようにするために?
途中の男がパスワードを読み取れないようにしたい場合は、それらのパスワードをハッシュ化してください。それはそれと同じくらい簡単です。
途中の男性がユーザー名を取得するのを避けたい場合もあります。ここでは、ハッシュだけを送信することはできませんが、サーバーが復号化のための秘密鍵を持っている場合、クライアントに送信される公開鍵でユーザー名とパスワードのペアを暗号化できます。
途中の男がログオンできないようにする場合は、タスクが少し複雑になります。公開/秘密鍵は引き続き使用できますが、次のようになります。
公開鍵は、事前にWebサービスのコンシューマに通信する必要があります(同じ鍵ペアを何度も何度も使用するという難点があります。また、他のチャネルが秘密鍵を送信するのが難しいため、ミドルはそれをキャッチすることはできません)、
または、Webサービスのコンシューマーは、サーバーが応答で自身の公開鍵を暗号化するのに役立つ2番目の公開鍵を送信できます。
OAuth を調べてください。これは、この「何かを実行するための権限」の役割用に設計されています。ユーザーIDを要求するのではなく、ユーザーに、信頼できるトークンを提供して、そのユーザーに与える許可を決定するために使用できるトークンを提供するよう依頼します。
すべてのセキュリティ暗号化グビンはフレームワークで処理されるので、そのようなフレームワークを使用して通信を暗号化する方法についてあまり心配する必要はありません。