2015-07-14 2 views
1

Моя проблема заключается в том, что моя служба только позволяет моей учетной записи Windows подключиться к ней, но я бы хотел разрешить подключения от любых действительных учетных записей Windows домена. Мой сервис размещен в IIS Express. Когда я просматриваю https://localhost:44300/FileRetrievalService.svc/get в Google Chrome, я вижу, что мой метод [WebGet] называется просто отлично. Когда я пытаюсь создать веб-запрос к нему, он также работает, до тех пор, как мне указать свою учетную запись пользователя Windows:Мое веб-приложение отклоняет проверку подлинности Windows для локальной учетной записи Windows

WebRequest request = WebRequest.Create(url); 
request.Method = "GET"; 
request.Headers.Add("Path", filePath); 
request.Credentials = new NetworkCredential("username", "password", "localhost"); 
return request.GetResponse(); 

Когда я пытаюсь указать другую локальную учетную запись Windows, на моей машине, чтобы проверить подлинность пользователя против мое обслуживание путем изменения "username" и "password" в приведенном выше коде на другой счет, который я знаю наверняка существует на моей машине, я получаю следующее сообщение об ошибке:

System.Net.WebException: The remote server returned an error: (401) Unauthorized.

у меня есть следующие в моей службы Web.config:

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding name="webHttpBindingWithTransportSecurity"> 
      <security mode="Transport"> 
      <transport clientCredentialType="Windows"/> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    <services> 
     <service name="FileRetrievalPoCV3.FileRetrievalService"> 
     <endpoint behaviorConfiguration="webBehavior" binding="webHttpBinding" bindingConfiguration="webHttpBindingWithTransportSecurity" contract="FileRetrievalPoCV3.IFileRetrieval" /> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="webBehavior"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <directoryBrowse enabled="false"/> 
    </system.webServer> 
</configuration> 

В чем причина этой проблемы?

+1

Я собираюсь угадать, что у вашей учетной записи есть admin priveleges, а другая учетная запись - нет. Если это так, вам необходимо явно предоставить разрешения для вашей папки проекта (то есть с помощью проводника Windows) или назначить этого пользователя группе, у которой уже есть разрешение. – Keith

+0

@Keith Вы правы, моя папка проекта не имела прав для моего пользователя, не являющегося администратором. Я добавил разрешения для группы «Пользователи», частью которой является эта учетная запись, и она разрешает соединение. Тем не менее, я нахожу это немного странным, потому что он работал из коробки, когда я сделал программный сервис, который в основном делал то же самое (http://stackoverflow.com/questions/31326727/cant-get-certificate-message-credentials -в-работа-в-моем-ФОС-службы). Единственное различие заключается в том, что теперь я размещаюсь в IIS Express. Почему это может быть? Из-за ИИС? – Alexandru

+0

@ Keith О, я понимаю, почему сейчас. Как IIS Express, так и хостинг-сайт IIS, фактический сервисный файл должен быть предоставлен пользователю, что означает, что IIS Express и IIS используют рефлексию, чтобы попытаться получить файл, используя привилегии этого пользователя. Я получаю это сейчас. – Alexandru

ответ

1

Я собираюсь угадать, что у вашей учетной записи есть admin priveleges, а другая учетная запись - нет. Если это так, вам необходимо явно предоставить разрешения для вашей папки проекта (то есть с помощью проводника Windows) или назначить этого пользователя группе, у которой уже есть разрешение.

+0

Просто заметьте, ему нужны только разрешения на чтение для файла службы (* .svc) для соответствующего пользователя. – Alexandru

Смежные вопросы