2017-02-20 16 views
2

セキュリティトークンを使用してユーザーを認証するAzureに移動します。だから今私は、メッセージのヘッダーにセキュリティトークンを渡して、IDispatchMessageInspectorのサーバー側での動作を使用してそれを読み取っています。基本メカニズムはうまく動作しますが、トークンを認証できない場合は、ちょうどそれが失敗したかのようにトークンを拒否する必要があります。UserNamePasswordValidator私はこのコードを終える方法任意のアイデア:どのようにWCFでメッセージを拒否しますか?

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
{ 
    if (!this.IsAuthenticated(securityToken)) 
    { 
     <Return Error Message Structure> 
    } 
} 
+0

基づいて、このSOAPやRESTですか? –

+0

石鹸なし、ピーナッツ。私はどちらかの答えを取る。 –

+0

RESTfulなサービスの場合、明らかにするべきことは、情報が何であるかを示すオプションの応答本体を使用して、サーバー403の応答を返すことです。 –

答えて

2

シンプルなオプションがFaultExceptionを投げることです。

object IDispatchMessageInspector.AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext) 
{ 
    try 
    { 
     if (!this.IsAuthenticated(securityToken)) 
     { 
      throw new FaultException<string>("some message"); 
     } 
    }  
    catch (FaultException e) 
    { 
     throw new FaultException<string>(e.Message); 
    } 
    return null; 
} 

ます(デフォルトは500です)よりエレガントで返されるはhttpStatusコードを制御何かをしたいなら、あなたは障害を監視派遣メッセージインスペクタを登録するエンドポイント動作の拡張を実装することができます。ポストは、以下を参照してください:

http://www.shulerent.com/2016/05/31/returning-custom-http-status-codes-for-wcf-soap-exceptions/

関連する問題