2012-02-24 7 views
1

私は非常に単純なWCF4を持っています.WcfRestContribを使用してカスタム基本認証を可能にする安心なWebサービスです。これは、クライアントが事前にユーザー名とパスワードを提供してもうまく動作しますが、そうでない場合は、クライアントに(401応答を通じて)クレデンシャルを提供するように挑戦するのではなく、400 Bad Requestレスポンスを返します。WebAuthenticationConfigurationを使用した場合の401チャレンジレスポンスの有効化

サービスでは、WcfRestContribを実装するための宣言的なアプローチを使用して、必要なクラスを属性で修飾しています。ここに私のServiceContractの宣言は次のとおりです。

一つだけの非常に簡単な操作がある
// Standard attributes here 
[WebAuthenticationConfiguration(typeof(WebBasicAuthenticationHandler), 
           typeof(SecurityValidator), 
           false, 
           "SearchService") 
] 
public class SearchService 

:資格情報が渡されたときに、それが唯一の呼び出されるので、それはおそらく問題ではありませんが(ように見える

// Standard attributes here 
[OperationAuthentication] 
SearchResponse Fetch(SearchRequest request) 

そして、私のUserNamePasswordValidatorを):私はWcfRestContribをデバッグしようとしWebBasicAuthenticationHandlerクラスがBasicAuthorizationExceptionを投げていることがわかる

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; 
} 

(これしかし、何らかの理由で何らかの理由で例外を401に変換していません。

WcfRestContrib github siteで読んだ内容に基づいて、an issue posted by its author (Mike O'Brian)が表示されます以外はの401を返します。現在401のチャレンジを返しているので、私はそれを読んでいます。

この機能がある場合、何が欠けているのですか、それとも何か間違っていますか?

UPDATE

WcfRestContribでこれを行う方法がない場合、(IISにおける標準的なWindowsベースの基本認証を使用して超えて)これを達成するための別の方法はありますか?私は任意の(他の)代替ソリューションに開放されています。

答えて

1

私はそれを理解しました。

// Standard attributes here 
[WebAuthenticationConfiguration(typeof(WebBasicAuthenticationHandler), 
          typeof(SecurityValidator), 
          false, 
          "SearchService"), 
ErrorHandler(typeof(WebErrorHandler))] 
public class SearchService 

ジャストサービスへ[ErrorHandler(typeof(WebErrorHandler))]属性を追加することによって、魔法のすべてが起こる可能:私はErrorHandlerAttributeと私のServiceContractを飾るために必要。私はそれが何かシンプルでなければならないことを知っていました、私は机の上で私の額を平らにする前にそれを見たと思っていただけです。

関連する問題