基本認証を必要とするWCF RESTサービスを公開するクリーンな方法はありますが、ユーザー名/パスワードの実際の検証は自分で処理しますか?構成でWCFに次のように指示すると、基本認証を使用したい場合は、IISおよびIISは、ウィンドウアカウントに対してのみ基本認証を実行できます。
私たちが見つけた唯一のハックは、WCFに嘘をつき、サービスにセキュリティがないことを伝えてから、汎用IHttpModule(どのURLにどの認証/承認があるかを示す独自の構成ファイルがある)を使用してWCFスタックの外部で認証を行うことです。要件)。
もっと良い方法があるはずです。誰か持ってる?
クライアントに設定されているユーザー名とパスワードは次のようになります。
cc.ClientCredentials.UserName.UserName = ReturnUsername();
cc.ClientCredentials.UserName.Password = ReturnPassword();
または、RESTメッセージの本文に埋め込まれていますか?
前者の場合、カスタムUserNamePasswordValidatorを使用できます: http://msdn.Microsoft.com/en-us/library/aa702565.aspx
後者の場合、サービスをセキュリティなしに設定し、カスタムServiceAuthorizationManagerを使用してメッセージの内容を検証できます。 http://msdn.Microsoft.com/en-us/library/ms731774.aspx
どちらかがお役に立てば幸いです。サンプルコードと設定を投稿しようと思いますが、私は@自宅であり、コードにアクセスできません。これはすべて@仕事です。
RESTfulサービスのカスタム基本認証 を参照してください。 Pabloのアプローチでは、RESTスターターキットを介して提供されるインターセプター機能を使用して問題を解決します。RESTスターターキットに依存したくない場合は、次に、独自のサービスホストを作成し、提供されているインターセプター機能を使用できます。
IISでホストする場合は、カスタムhttpモジュールを使用するのが最善の方法です。プリンシパルをWCF側に引き継いで、コードアクセスセキュリティを実行できます。 IIS/ASP.NETのWindows以外のアカウントに対するHTTP基本認証(パート3-WCFサポートの追加) を参照してください。 。NET 3.5/VS2008上のASP.NETWebサービスのカスタムHTTP基本認証 も参照してください。
IISを使用していない場合は、userNameAuthenticationを実装できるはずです。 最後に!WCFのトランスポート認証を介したユーザー名 を参照してください。
はい、絶対に方法があります。サービスのカスタムuserNamePasswordValidationMode
値を構成し、提供された資格情報を検査および検証できるオーバーライドされたメソッドを持つクラスを指すようにする必要があります。 RESTful呼び出しを行う場合、適切な形式で基本認証を使用する場合のこれらの資格情報は、要求ヘッダーに含める必要があります。このカスタムメソッドを使用すると、資格情報を検査してから、クライアントをサービスに対して認証することができます。 Windowsアカウントやドメインも必要ありません。
良い点は、そのセキュリティコンテキストを次のレベルに引き上げ、メソッドレベルできめ細かい認証を提供できることです。クライアントの大規模なプールがサービスにアクセスできるが、その中のすべてのメソッドがアクセスできるわけではない場合があります(つまり、有料クライアントと無料クライアント)。この場合、必要に応じて、メソッドレベルで認証を提供することもできます。
以下は、completeソリューションに必要な構成とセキュリティの両方を含む、私によるステップバイステップのソリューション(埋め込むにはステップが多すぎる)です。問題は、SSL証明書でトランスポートを保護せずに基本認証が使用されることが多く、これはbadです。必ずすべての手順を実行してください。そうすれば、WCFRESTfulベースのサービスでWindowsアカウントや構成を一切必要とせずに基本認証を実装できます。