WCF REST RequestInterceptor аутентификация - PullRequest
5 голосов
/ 10 августа 2010

Я пытаюсь выполнить базовую проверку подлинности в запросе WCF RequestInterceptor. Я использую эту статью в качестве начала.

Я сталкиваюсь с проблемой связи между перехватчиком и службой. Ничто из того, что я пробовал, похоже, не работает. Пока что я пробовал:

  • OperationContext.Current
  • requestContext.RequestMessage.Properties [HttpRequestMessageProperty.Name] ["foo"] = значение
  • 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)?

Спасибо

1 Ответ

2 голосов
/ 15 августа 2010

Вы создаете 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;
     }
}

Я использовал этот пример, и он работает, присмотритесь к своему коду, вы можете что-то упустить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...