0

クライアント資格情報を受け取り、認証方法に基づいてある種の役割ベースのデータを維持する必要がある WCF サービスがあります。

クライアントは多くの異なるシステムに常駐するため、各クライアントには一意のユーザー ID とパスワードがあります。

私は basicHttpBinding を使用しており、次のような記事をいくつか読みました 。 -channelfactory-interface/、プロセスを説明します。

だから私が探しているのは、誰かがこのように構成された完全なクライアント/サーバーを持っているかどうかです。

私がやりたいのは、各リクエストのヘッダーにユーザー名とパスワードを渡して、失敗した場合は何らかの SecurityTokenValidationException を返すか、渡した場合は続行することです。

ありがとう。

アップデート

クライアントとサーバーの両方で、次の構成で wsHttpbinding を使用しています。

  <wsHttpBinding>
    <binding name="wsHttpEndpointBinding" >
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Basic" />
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </wsHttpBinding>

クライアントからサーバーへの呼び出しは次のようになります。

ServiceReference1.ServiceClient myClient = new ServiceReference1.ServiceClient();

myClient.ClientCredentials.UserName.UserName = "billuser";
myClient.ClientCredentials.UserName.Password = "mypassword";

Response.Write("Data from WCF Service: " + myClient.GetData(1));

サーバーで CustomUsernamePasswordValidator をリンクするには、「... アクティブにできませんでした」というメッセージがまだ表示されるので、少し手を加える必要があると思います。エラー。

4

1 に答える 1

1

basicHttpBinding を使用する必要がありますか? このバインディングは、実際には、従来の WS-BasicProfile 実装 (つまり ASMX) のサポートを提供するためにのみ存在します。クライアントも .NET/WCF を使用している場合は、wsHttpBinding を使用することを強くお勧めします。これは、すぐに使用できる多数のセキュリティ オプションを提供します。トランスポートおよび/またはメッセージセキュリティで証明書、ユーザー名/パスワードなどを使用でき、セキュリティに関するものを自分で書く必要はありません。構成するだけ (CAG) です。

セキュリティ資格情報は、コードから直接アクセスする必要がある場合に備えて、OperationContext を介してサービス自体で利用できます。ただし、コードがそれにアクセスする必要がある場合は、OperationContext から関連情報を抽出し、それをよりアプリケーション固有のものに配置する動作を記述して、アクセスする必要があるすべての場所で System.ServiceModel を参照する必要がないようにすることをお勧めします。 OperationContext に関する情報。

于 2009-11-26T02:40:35.083 に答える