2015-04-01 5 views
1

У меня есть вопрос вокруг авторизации WCF с учетной записью домена через HTTP-трафика, размещенного на IIS (нет производства, так нет сертификата SSL не был доступен для использования через Интернет)службы WCF Выполняется авторизация с Active Directory - Access Denied Ошибка

I Мне хотелось бы узнать, как настроить проверку подлинности Windows с клиента на мою веб-службу. В настоящее время я тестирование на одной и той же локальной сети, прокси-серверы не проблема

Я включил список испытанных шагов в конце этого поста

Edit: Ошибка, которая происходит только доступ является denied, ничего другого, заданного с , попробуйте, поймайте в клиентском приложении. Если есть способ получить более подробную информацию, пожалуйста, дайте мне знать и плохо добавьте результат в сообщение.

службы WCF код:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]  

public class Data : IData 
    { 
     [PrincipalPermission(SecurityAction.Demand, [email protected]"Administrators")] 

     public List<Incident> GetCases() 
     {    

      Queries query = new Queries(); 

      List<Incident> iList = query.CallCases(); 

      return iList; 

     } 
    } 

WCF Web Config Наручники:

<wsHttpBinding> 
    <binding name="TransportSecurity"> 
     <security mode="None"> 
      <message clientCredentialType="Windows" algorithmSuite="Default"/> 
     </security> 
    </binding> 
</wsHttpBinding> 

WCF Web Config Поведение:

<behavior name="Behaviour1"> 
    <serviceMetadata httpGetEnabled="true" httpGetUrl=""/> 
    <serviceDebug includeExceptionDetailInFaults="true" /> 
    <useRequestHeadersForMetadataAddress> 
     <defaultPorts> 
      <add scheme="http" port="9577" /> ///This port is correct 
     </defaultPorts> 
    </useRequestHeadersForMetadataAddress> 
</behavior> 

WCF Web службы настройки:

<service behaviorConfiguration="Behaviour1" name="WebService1.Data"> 
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="TransportSecurity" contract="WebService1.IData"> 
     <identity> 
       <dns value="demo.DomainName.co.uk" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
</service> 

Client Application (Has Service ссылка добавляется)

  DataClient client = new DataClient(); 

     AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
     PrincipalPermission principalPerm = new PrincipalPermission(null, "Administrators"); 
     principalPerm.Demand(); 
     Console.WriteLine("Demand succeeded."); 

     client.ClientCredentials.Windows.ClientCredential.Domain = "Domain Name"; 
     client.ClientCredentials.Windows.ClientCredential.UserName = "User Account"; 
     client.ClientCredentials.Windows.ClientCredential.Password = "Password"; 

     //client.ClientCredentials.UserName.UserName = @"[email protected]"; 
     //client.ClientCredentials.UserName.Password = "Password"; 
     //client.ClientCredentials.UseIdentityConfiguration = true; 

     try 
     { 
      List<Incident> cases = client.GetCases().ToList(); 

      foreach (Incident Inc in cases) 
      { 
       Console.WriteLine(Inc.CaseID); 
      } 

     } 

     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 

Покушение разрешения:

  • Использование домена и локальных пользователей
  • модифицирующих типа Реквизит клиента к основной, NTLM и Windows,
  • с использованием установка IIS для использования
  • IIS имеет базовую аутентификацию и проверку подлинности Windows

Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать.

Спасибо за любую помощь вы можете предоставить

+1

Добро пожаловать в SO. Вы написали хороший вопрос для первого плаката, но я думаю, что отсутствует небольшая, но важная часть информации, а именно: какое поведение или ошибки вы видите? Кроме того, я думаю, что установка 'securityMode' в« None »может повлиять на то, что вы пытаетесь сделать - параметры безопасности для детей могут быть проигнорированы (это только догадка с моей стороны). – Tim

+0

Спасибо, Тим, полностью забыл добавить это, я добавил его сейчас. И спасибо за теплый прием –

ответ

0

@ Тим указал мне в правильном направлении, это разрешение:

<wsHttpBinding> 
<binding name="TransportSecurity"> 
    <security mode="Message"> 
     <message clientCredentialType="Windows" algorithmSuite="Default"/> 
    </security> 
</binding> 
</wsHttpBinding> 

Потому что у меня нет сертификата SSL мне нужно установить режим безопасности Сообщение, я сбился с толку, поскольку большинство людей тестируют с использованием SSL, что потребует безопасности на транспорте, и я установил его для None для тестирования.

Спасибо за помощь Тим