0

IDispatchMessageInspector以下のようにセキュリティを提供するために、WCF サービスに実装しました。

クライアント側のコード:

 private class mySecurityInspector : IClientMessageInspector, IDispatchMessageInspector
  {
   private const string HEADER_NS = "urn:myservice:authentication-header:2011";

   public object BeforeSendRequest(ref Message request, IClientChannel channel)
   {
     MessageHeader<string> messageHeader = new MessageHeader<string>  
                              (getAuthKeyFromConfig(), false, string.Empty, false);

    // add the new header to our request
     request.Headers.Add(messageHeader.GetUntypedHeader("",                   
                                                   HEADER_NS));
      return null;
    }

}

サーバー側 (サービス):

 private class mySecurityInspector: IDispatchMessageInspector
 {
   private const string HEADER_NS = "urn:myservice:authentication-header:2011";

  public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request,     
      System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext            
               instanceContext)
     {

            string authKey = request.Headers.GetHeader<string>(“”, HEADER_NS);
             if (authKey != getAuthKeyFromConfig())
            {
               throw new 
              Exception(string.Format(ServiceMessages.MSG_UNAUTHORISED_CLIENT,  
             "");
   }

}

}

このようにして、authkey を知っているクライアントだけが私のサービスにアクセスできます。これは私がやったことです。しかし、セキュリティについてはよくわかりません。何らかの方法で誰かがネットワーク ワイヤに向かう石鹸からこの認証キーをハッキングすると、私のサービスにアクセスできるようになると思います。このシナリオでサービスを保護するにはどうすればよいですか? 選択したクライアントのみが私のサービスにアクセスできるようにするための解決策を教えてください。

4

1 に答える 1

1

シナリオのソリューションは HTTPS です。誰かがネットワーク上で authkey を盗むのではないかと心配している = 安全なチャネルが必要であり、安全なチャネルを取得する最も簡単な (そしてあなたの場合は最善の) 方法は、HTTPS を使用することです。

問題のタイトルでパスワード/ユーザーIDに言及した理由はわかりませんが、認証に成功したクライアントに対してのみこの認証ヘッダーを使用する場合、おそらく車輪を再発明しています. WCF は、このシナリオを既にサポートしています。これは SecurityContext (またはセキュリティ セッション) と呼ばれ、たとえば、セキュリティ モデルとクライアント資格情報の種類で使用されWSHttpBindingますMessageUserName資格情報は最初の要求でのみ検証され、その後、クライアントはセッション全体で有効なセキュリティ トークンを送信します。欠点は、通信がステートフルになることです。

于 2011-12-19T18:17:57.310 に答える