2010-08-10 33 views
5

Estoy intentando hacer una autenticación básica en un WCF RequestInterceptor. Estoy usando this article como un comienzo.WCF REST RequestInterceptor authentication

El problema con el que me estoy encontrando es la comunicación entre el interceptor y el servicio. Nada de lo que he intentado parece funcionar. Hasta ahora, he intentado:

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

Pero no importa lo que configuro, parece que no puedo acceder al mismo en el comportamiento del servicio:

[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; 
    } 
} 

Mi qu son las siguientes:

  1. ¿Cómo puedo pasar datos entre el Interceptor y el servicio?

  2. ¿Existe alguna manera canónica de pasar información de autenticación entre ellos (tenga en cuenta que la información de autenticación es un UID en la base de datos, no una identidad de Windows)?

Gracias

Respuesta

2

¿Va a crear la SecureWebServiceHostFactory con su Interceptor?

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; 
    } 
} 

He usado ese ejemplo y funciona, eche un vistazo más de cerca a su código, es posible que le falte algo.