6

私は次のものが必要なプロジェクトに取り組んでいます。

  • サーバー側のWCFサービス(.NET 3.5)
  • クライアント側のWPFクライアント(.NET 3.0)

(サーバー側で)認証と承認を使用する必要がある既存のアプリケーションがあります。また、ユーザーに関するメタデータをWCFサービスのスレッドプリンシパル(サイトオブジェクト)に保存する必要があります。これは、どうしても必要な場合にWCFサービスで取得できるようにするためです。一部のビジネスロジックでは、これが必要になる場合があります。だから私の計画は次のことをすることでした...

サーバー用のカスタムServiceAuthorizationManagerを作成し、そこでユーザーにログインして、既存のアプリケーションからロールを取得します。「Site」オブジェクトをキャッシュし、さらにリクエストがあればキャッシュからプルします。カスタムデータを保持するためのCustomPrincipalオブジェクトも必要です。次のようにWCFで組み込みの役割フィルタリングを使用できるように、ユーザーを偽装したいと思います。

[PrincipalPermission(SecurityAction.Demand, Role = "Role1")]
public string[] RolesForUser(string username){}

カスタムロールプロバイダーでASP.NET承認を使用しようとしましたが、現在のプリンシパルに何も設定できませんでした。また、カスタムIAuthorizationPolicyを使用しようとしましたが、問題が発生しました。これらの問題は、WCFClient.exeアプリケーションを使用できることを扱っていましたが、(mex endpoingを使用して)検出したときに資格情報が提供されないため、ログインが失敗しました。最終的に、ServiceAuthorizationManagerが正しい方法であると判断しましたが、他の提案も受け付けています。

クライアントで、次のように資格情報を収集し、それらをWCFプロキシクラスに配置します。

proxy.ChannelFactory.Credentials.UserName.UserName = userName;
proxy.ChannelFactory.Credentials.UserName.Password = password;

このルートをたどり始めると、マネージャークラスのCheckAccessCoreメソッドでユーザー名/パスワードを取得できないことに気付きました。さらに調査したところ、カスタムUserNamePasswordValidatorで実際に認証する必要があることがわかりました。そこで、そのうちの1つを作成しました。問題は、validateメソッドが呼び出されないことです。

さらに調査したところ、validateメソッドを呼び出すには、WCFサービスにメッセージレベルまたはトランスポートレベルのセキュリティが必要であることがわかりました。それに関する問題は、 X.509証明書なしでメッセージまたはトランスポートレベルのセキュリティを設定する方法を理解できないことです。この製品は数百台の非常にロックダウンされたマシンに組み込まれ、証明書をインストールすることはできません。

証明書をインストールせずに、私が求めていることを実行する方法はありますか?

4

3 に答える 3

22

実際には可能ですが、独自のバインディングを実装する必要があります。

Yaron Navehは、HTTP経由でクリアテキストのユーザー名/パスワードを有効にするWCFバインディングを開発しました。彼の記事には、バインディングのコードが含まれています。

于 2009-02-15T16:22:38.737 に答える
6

短い答え; できません。ユーザー名/パスワードを使用するとすぐに、ある種の安全なチャネルが必要になります。

ただし、クライアントに証明書は必要ありません。サーバー上のみ。

于 2008-12-18T22:33:16.897 に答える
1

あなたのネットワーク インフラストラクチャの詳細はわかりませんが、Windows ドメインにいる場合は、Windows 資格情報の使用を検討する必要があります。

Windows 資格情報を使用する場合、証明書なしでメッセージ セキュリティを使用することができます。これは wsHttpBinding のデフォルトの動作です (既定の動作)。

すぐに使用できるソリューションを (独自のバインドを実装せずに) 使用すると、WCF は、認証資格情報がメッセージに含まれる場合は常にセキュリティで保護されたチャネルを使用することをお勧めします (要求します)。

資格情報をクリア テキストで指定できるカスタム バインドを使用することは確かに解決策ですが、使用する前によく考えてください。

于 2012-01-22T03:04:58.570 に答える