クライアントとサーバー間の信頼を維持するために事前共有キーメカニズムを使用するXML-RPCクライアントとサーバーを作成しています。クライアントとサーバーはどちらも、HTTPプロトコルを介して通信するPHPで記述されたWebアプリケーションです。具体的には、クライアントはMoodleプラグインであり、サーバーは学校のリソース管理システムです。
認証が成功すると、サーバーは一時リンクを生成して返します。これにより、エンドユーザーはアプリケーション認証メカニズムをバイパスしてmoodleからリソース管理システムにログインできるため、ユーザーは自分の資格情報を2回入力する必要がありません。
クライアントはこのプロセスで2つの異なる関数(Auth1とAuth2)を呼び出す必要があります。認証が成功すると、クライアントはMoodleユーザーがMoodleを介して学校管理システムにログインできるようにする特別なリンクを返します。
私はそれが次のように機能することを望みました:
1)クライアントとサーバーの両方が同じパスフレーズを知っている必要があります。
2)クライアント(Moodleプラグイン)はサーバー上で関数Auth1を呼び出し、英数字のランダムなシーケンスAとリンクを要求しているユーザー名をパラメーターとして渡します。
3)サーバーはセッションを作成し、英数字のランダムシーケンスBを生成してクライアントに送信し、ユーザー名、ランダムシーケンスAおよびBの両方をセッション変数に格納します。
4)クライアントは関数Auth2を呼び出し、パラメーターとしてsha(ランダムシーケンスA。ランダムシーケンスB。事前共有キー)を渡します。
5)サーバーは、受信したパラメーターを自分のsha(ランダムシーケンスA。ランダムシーケンスB。事前共有キー)と比較します。受信したパラメーターが彼のshaと同じである場合、彼はクライアントにリンクを送信します。そうでない場合は、空の文字列を送信します。
関数Auth1を正常に呼び出すことができますが、関数Auth2を呼び出すと、サーバーがセッションを受信していないことに気付きます。
このようにして、WPA-PSKで行われるのと同様に、パスフレーズをプレーンに送信せずにクライアントとサーバーを認証できます。
クライアント側でripcordを使用し、サーバーでcodeigniterのxmlrpcのライブラリを使用しています。
XML-RPC呼び出し間のセッションを維持するにはどうすればよいですか?