2011-02-25 3 views
5

私は小さなプロジェクト(WCF + REST)を作っていますが、私は小さな問題があります。私は自分の認証と認証のクラスを作りたい。OperationContextのヘッダー

マイ承認クラス:

//validate api key 
public class BasicAuthorization : ServiceAuthorizationManager 
{ 
    public override bool CheckAccess(OperationContext operationContext, 
     ref Message message) 
    { 
     //some code 
    } 
} 

マイ認証クラス

// validation user login & password 
public class BasicAuthentication : ServiceAuthenticationManager 
{ 
    public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(
     ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri, 
     ref Message message) 
    { 
     //some code 
    } 
} 

私はあまりにもいくつかの設定ファイル

<behavior> 
    <serviceAuthorization 
     serviceAuthorizationManagerType="WCF.BasicAuthorization, WCF"/> 
    <serviceAuthenticationManager 
     serviceAuthenticationManagerType="WCF.BasicAuthentication, WCF"/> 
</behavior> 

クラスのコードは重要ではありませんが - 問題ではありません。

私の問題は、headersをoperationContextまたはmessageクラスから取得する方法です。私は前に、私は安静にこれを行うので、手動でAuthorizaion header/www-authenticateヘッダーを設定したいが、アプリケーションはそれを見ない。

私はFiddler2をオンにし、例えば任意のヘッダを入れてみてください。

Content-Type: application/xml 
Authorization: Basic bla23rwerfsd3== 
User-Agent: Fiddler 
Host: localhost:59305 

そしてmessage.Headers/operationContext.Headersはどんな私のヘッダーを持っていませんが、何の認証を(唯一の他のものを持っていません) 、コンテンツタイプなし

+0

私は同じ問題を抱えています。この問題に対する解決策はありますか? –

答えて

14

Web操作中に、現在のコンテキストを表す静的プロパティ "Current"を持つSystem.ServiceModel.Web.WebOperationContextクラスを使用して、ヘッダーにアクセスできます。これは、 "WebHeaderCollection"タイプの "Header"プロパティを含む "IncomingRequest"プロパティを提供します。

+0

ええ、ありがとうそれは素晴らしい仕事です:) – user634199

+0

それは動作します。また、System.ServiceModel.Webシステムアセンブリへの参照も追加する必要があります。 –

関連する問題