代码之家  ›  专栏  ›  技术社区  ›  James Hughes

验证WCF数据服务

  •  1
  • James Hughes  · 技术社区  · 15 年前

    我正在尝试通过Silverlight验证对WCF数据服务的调用。本质上,当用户登录时,他们会得到一个特殊的散列,该散列应该嵌入到WCF数据服务的每个请求的头中。目前,通过QueryInterceptor方法将其用作检查,例如

        [QueryInterceptor("Orders")]
        public Expression<Func<Orders,bool>> OnQueryOrders()
        {
            string hash = WebOperationContext.Current.IncomingRequest.Headers.Get("MyHeader");
    
            if(!TestHash(hash))
            {
                return o => false;
            }
            else
            {
                return o => true;
            }
        }
    

    2 回复  |  直到 15 年前
        1
  •  5
  •   James Hughes    15 年前

    事实上,我想我自己解决了这个问题。通过重写OnStartProcessingRequest,如果它不适合,我可以抛出一个异常。

        protected override void OnStartProcessingRequest(ProcessRequestArgs args)
        {
            if (string.IsNullOrEmpty(WebOperationContext.Current.IncomingRequest.Headers.Get("MyMagicHeader")))
            {
                throw new DataServiceException(404, "Access denied!");
            }
            else
            {
                base.OnStartProcessingRequest(args);
            }
        }
    
        2
  •  0
  •   Tanner    15 年前

    您是否考虑过WCF消息检查器?我认为(不保证)消息检查器将在查询拦截器之前被命中,因此您可以检查头并验证用户哈希值。这里有一个很好的链接,上面有关于 Writing Message Inspectors