2017-02-20 140 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

对于REST风格的服务,最明显的做法是返回一个服务器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/

相关问题