WcfRestContrib を使用してカスタム基本認証を許可する、非常に単純な WCF4 Restful Web サービスがあります。クライアントがユーザー名とパスワードをプリエンプティブに提供する場合はうまく機能しますが、そうでない場合は、クライアントに資格情報を提供するように要求するのではなく、400 Bad Request 応答を返します (401 応答を介して)。
このサービスは、必要なクラスを属性で装飾することにより、WcfRestContrib を実装する宣言的アプローチを使用しています。これが私の ServiceContract 宣言です。
// Standard attributes here
[WebAuthenticationConfiguration(typeof(WebBasicAuthenticationHandler),
typeof(SecurityValidator),
false,
"SearchService")
]
public class SearchService
非常に単純な操作が 1 つだけあります。
// Standard attributes here
[OperationAuthentication]
SearchResponse Fetch(SearchRequest request)
そして、私のようにUserNamePasswordValidator
見えます(ただし、資格情報が渡されたときにのみ呼び出されるため、おそらく問題ではありません):
public override void Validate(string userName, string password)
{
// TODO: Insert login validation logic here.
// To indicate login failure, throw a FaultException
// throw new FaultException("Unknown Username or Incorrect Password");
// Just return to indicate that the username and password are valid
return;
}
WcfRestContrib をデバッグしようとしたところ、WebBasicAuthenticationHandler
クラスがBasicAuthorizationException
(フレームワーク コードでのみキャッチされる) をスローしていることがわかりましたが、何らかの理由で例外が 401 に変換されていません。
私がWcfRestContrib github サイトで読んだ内容に基づいて、その作者 (Mike O'Brian) が投稿した問題があり、401以外のものを返すようにしたいと言っています。 401チャレンジ。
この機能がある場合、何が欠けているのでしょうか、それとも何か間違っていますか?
アップデート
WcfRestContrib でこれを行う方法がない場合、(IIS で標準の Windows ベースの基本認証を使用する以外に) これを達成する別の方法はありますか? 私は(他の)代替ソリューションを受け入れます。