【问题标题】:WCF REST RequestInterceptor authenticationWCF REST RequestInterceptor 身份验证
【发布时间】:2011-03-27 14:16:57
【问题描述】:

我正在尝试在 WCF RequestInterceptor 中进行一些基本身份验证。我使用this article 作为开始。

我遇到的问题是拦截器和服务之间的通信。我尝试过的任何方法似乎都不起作用。到目前为止,我已经尝试过:

  • OperationContext.Current
  • requestContext.RequestMessage.Properties[HttpRequestMessageProperty.Name]["foo"] = value
  • HttpContext.Current.Request

但是无论我设置什么,我似乎都无法在服务行为本身中访问它:

[AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed )]
[ServiceBehavior( InstanceContextMode = InstanceContextMode.Single )]
public class AdvertiserService : ApiServiceBase<AdvertiserDataAccessor>, IAdvertiserService
{
    [WebGet( UriTemplate = "" )]
    public List<Advertiser> GetAdvertisers()
    {
        var request = HttpContext.Current.Request;
        var headers = HttpContext.Current.Request.Headers;
        var p = HttpContext.Current.Request.Headers["Principal"];

        OperationContext ctx = OperationContext.Current;
     }
}

我的问题是:

  1. 如何在拦截器和服务之间传递数据?

  2. 是否有规范的方式在它们之间传递身份验证信息(注意,身份验证信息是数据库中的 UID,而不是 Windows 身份)?

谢谢

【问题讨论】:

    标签: authentication rest wcf wcf-security


    【解决方案1】:

    您是否正在使用您的拦截器创建 SecureWebServiceHostFactory?

    public class SecureWebServiceHostFactory : ServiceHostFactory
    {
        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {
             WebServiceHost2 host = new WebServiceHost2(serviceType, true, baseAddresses);
             host.Interceptors.Add(new AuthenticationInterceptor());
             return host;
         }
    }
    

    我已经使用了该示例并且它有效,请仔细查看您的代码,您可能会遗漏一些东西。

    【讨论】:

      猜你喜欢
      • 2015-04-14
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      相关资源
      最近更新 更多