2009-04-07 18 views
1

私は外向きのWebサービスを持っていますが、有効なクライアントからの要求が確実に行われるように検証システムを生成する必要があります。 Webサービスのクライアント固有の確認番号を生成する

はのは、次のように、元のWebサービスが定義されているとしましょう:

[OperationContract] 
public void Service.RequestMethod (string clientId, int reqNumber, 
    string reqText) 
{ 
    // do stuff with the parameters 
} 

私は、要求が実際にclientIdパラメータで指定されたクライアントから来たことを確認します。

私の現在の計画は、メソッドシグネチャに別のパラメータを追加して、チェックサムを並べ替えることです。

[OperationContract] 
public void Service.RequestMethod (string clientId, int reqNumber, 
    string reqText, string reqChecksum) 
{ 
    // verify reqChecksum, then 
    // do stuff with the parameters 
} 

承認されたクライアントによってチェックサムが計算されたことを確認する関数が必要です。 reqNumberおよびreqTextパラメータ、およびクライアントとサーバーの両方が認識するクライアント固有の「パスワード」で計算する必要があります。

効果で、それは次のようになります。

private bool VerifyChecksum(int reqNumber, string reqText, 
    string clientPassword, string reqChecksum) 
{ 
    // hash reqNumber, reqTxt, and clientPassword 
    // ensure it matches reqChecksum 
} 

誰もがこのハッシュ関数または全体としてのモデルのための任意の提案を持っていますか?

メッセージ固有、クライアント固有、推測しにくい(高いエントロピー)必要があります。

答えて

1

あなたはおそらく何らかの種類のMACを探しています。ハッシュのMD5のようなもの。 MD5の全体的な考え方は、それを「一部の」データに適用して価値を得ることです。 "一部のデータ"の部分が誰にも知られていない限り、値を再現することはほとんど不可能です。

+0

私はそれが特定のものと呼ばれると思っていました。ありがとう。 – Damovisa

1

標準のWebサービス認証方法の1つを使用してみませんか?よく知られて広く実装されているソリューションを選択できますし、パラメータと認証情報の両方を渡すことでインターフェイスを狂わせることもありません。

認証されたクライアントが複数の「clientId」を渡すことができますが、これには既知の解決策がたくさんあり、それはあなたの側にあります。たとえば、受け入れ可能なすべての(userId、clientId、methodname)の組み合わせをリストし、他のすべてのものを禁止するACL実装まで行うことができます。

+0

これは良い提案ですが、既存の認証方法を使用するのは難しいかもしれません。さまざまな場所からさまざまな方法(SOAP、REST、Remoting)でメソッドが呼び出される可能性があります。あなたは "パスワード"が目的であることを知っている限り自由にアクセスできます... – Damovisa

関連する問題