質問

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

  • サーバー側の 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 エンドポインを使用して) 検出するときに資格情報が提供されないため、ログインが失敗します。最終的には ServiceAuthorizationManager が正しい方法であると判断しましたが、他の提案も歓迎します。

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

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

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

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

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

役に立ちましたか?

解決

短い答え。あなたがすることはできません。ユーザー名/パスワードを使用するとすぐに、あなたは安全なチャネルのいくつかの並べ替えを必要とする。

しかし、あなたがクライアントに証明書を必要としません。唯一のサーバー上ます。

他のヒント

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

ヤロンNavehはそれがHTTP経由でクリアテキストのユーザ名/パスワードを可能に結合WCFを開発しました。彼の記事には、結合のためのコードが含まれます。

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

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

WCF(独自のバインディングを実装せず)アウトオブボックスソリューションを使用すると、認証資格情報がメッセージに含まれているときは常に安全なチャネルを使用するために(必要)ことをお勧めします。

それはあなたがクリアテキストで資格情報を指定することができますカスタムバインディングを使用すると、確かに解決策ですが、私はそれを使用する前に二度考えるだろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top