1

私はWCFにまったく慣れていないので、この質問がばかげていると思われる場合は申し訳ありません。

アカウント管理を行うWebサービスを作成したいと思います。私が言いたいのは、新しいアカウントを登録し、ログインして、自分のアカウントにリンクするようにサービスを要求できるクライアントがいるということです。

アカウントはSQLServerデータベースに保存されます。

私はこのインターフェースを持っています:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    bool Register(string username,  string password);
}

サービスを実装するクラスでは、新しいアカウントがデータベースに入力されます。

これはこれを行う正しい方法ですか、それとも別の方法で行う必要がありますか?また、セキュリティについてはどうですか?明らかに、パスワードはデータベースでハッシュされます(私はメソッドでハッシュを作成しています)が、クリアテキストでサービスに送信するのは正しい方法ではないようです。

2番目の問題は、カスタムUserNamePasswordValidatorを使用して、クライアントが認証後にのみメソッドを呼び出すことができるようにすることです(前の質問:基本認証とWCFを参照)

問題は、例外を作成したいということです。registerメソッドを除くすべてのメソッドにログインする必要があります。これを行う方法はありますか?または、この1つの方法のためだけに別のサービスを作成する必要がありますか?

誰かが私を助けてくれることを願っています。

ありがとう!

4

1 に答える 1

1
  1. WCF では、Transport または Message セキュリティを使用してメッセージを保護する必要があります。これを実装するだけで、送信パスワードを保護するのに十分です。トランスポート セキュリティは SSL/TSL を提供し、メッセージ セキュリティは WS-Security 仕様に従ってメッセージを保護します。必要に応じて、両方を使用できます。メッセージ セキュリティの長所と短所についてはhttp://msdn.microsoft.com/en-us/library/ms733137.aspxを、トランスポートについてはhttp://msdn.microsoft.com/en-us/library/ms729700.aspxを参照してください。

  2. カスタム検証を有効にする前に、上記のセキュリティ モデルのいずれかを実装する必要があります。カスタム検証を実装すると、チャネルを開く前の別のセキュリティ チェックになります。たとえば、カスタム セキュリティを備えたコードがあるとします。

     factory = new ChannelFactory<IContract>(binding,
                    new EndpointAddress(address, EndpointIdentity.CreateX509CertificateIdentity(serviceCertificate)));
     factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.PeerOrChainTrust;
     factory.Credentials.UserName.UserName = "admin";
     factory.Credentials.UserName.Password = "qwerty";
     channel = factory.CreateChannel();
    

このようなチャネルを作成すると、最初に証明書のチェックが行われ、次にサービス側で Validate() メソッドが呼び出されます。そこで、ログインを確認し、パスが間違っている場合は例外をスローして渡すことができます。したがって、 factory.CreateChannel() は例外を返し、チャネルは構築されないため、サービス メソッドを呼び出すことができません。1 つのメソッドのみを使用する場合は、登録目的でのみスタンドアロン サービスを使用することをお勧めします。または、Validate() メソッドに登録ロジックを入れてみることもできます。

于 2013-03-18T08:19:21.513 に答える