Ошибка PrincipalPermission.Demand () после перемещения службы WCF в SSL - PullRequest
1 голос
/ 22 мая 2011

Мое приложение Silverlight / WCF использует PrincipalPermission в каждом методе службы, чтобы обеспечить проверку подлинности пользователя.Это прекрасно работает, когда у меня все настроено на HTTP, но как только я настроил конечные точки / привязки службы для поддержки HTTPS (SSL), я получаю исключение при вызове метода Demand () моего объекта PrincipalPermission.

РЕДАКТИРОВАТЬ: я должен упомянуть, что я использую IIS 7.5 Express для размещения и отладки этого проекта.

Вот метод, который проверяет подлинность пользователя.Он вызывается из каждого из моих методов обслуживания:

 protected void SecurityCheck(string roleName, bool authenticated)
{
  System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;

  PrincipalPermission p = new PrincipalPermission(null, roleName, authenticated);
  try
  {
    p.Demand();
  }
  catch (Exception ex) 
  {        
    /* wrap the exception so that Silverlight can consume it */        
    ServiceException fault = new ServiceException() 
    {                 
      /* Code = 1 will mean "unauthenticated!" */                 
      Code = 1, Message = ex.Message 
    }; 
    throw new FaultException<ServiceException>(fault); }
}

}

Исключением является запрос "Ошибка основного участника".

Вот важные биты моей сети.config file:

<behavior name="BinarySSL">
          <serviceMetadata httpsGetEnabled="true"  />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="6553600"/>
          <serviceTimeouts transactionTimeout="00:10:00"/>
        </behavior>
<binding name="MyApp.Web.Services.ProjectService.customBinding0" 
          receiveTimeout="00:10:00" sendTimeout="00:10:00">
          <binaryMessageEncoding />
          <httpsTransport  authenticationScheme="Basic"/>
        </binding>
<service name="MyApp.Web.Services.ProjectService"  behaviorConfiguration="BinarySSL">
        <endpoint address="" binding="customBinding" bindingConfiguration="MyApp.Web.Services.ProjectService.customBinding0"
          contract="MyApp.Web.Services.ProjectService" />        
      </service>

Вот ClientConfig:

<binding name="CustomBinding_ProjectService">
                        <binaryMessageEncoding />
                        <httpsTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"  />
                    </binding>

    <endpoint address="https://localhost:44300/Services/ProjectService.svc"
                    binding="customBinding" bindingConfiguration="CustomBinding_ProjectService"
                    contract="ProjectProxy.ProjectService" name="CustomBinding_ProjectService" />

Я надеюсь, что здесь кто-то может указать в правильном направлении. Опять же, эта конфигурация работает нормально, пока я не настрою свои службы для SSL .Есть мысли?

Спасибо,

-Скотт


Я подумал, что нашел проблему, и ответил на свой вопрос - но я ошибался.Все еще есть та же проблема.

...