2015-10-02 3 views
1

Я пытаюсь передать учетные данные Windows в службу WCF, для которой требуется проверка подлинности Windows, но похоже, что мои учетные данные не попадают в эту службу. Моя служба не вызывает никаких ошибок, но когда я проверяю один из них ниже, они пусты. var user = WindowsIdentity.GetCurrent().User; var callerUserName = ServiceSecurityContext.Current.WindowsIdentity.User;Учетные данные, переданные от клиента в WCF, не делают его

Вот мой клиент сторона код ServiceReference1.DispatchServiceClient service = new DispatchServiceClient(); service.ClientCredentials.Windows.ClientCredential = ServiceCredentialsManager.GetNetworkCredentials(); service.ClientCredentials.UserName.UserName= ServiceCredentialsManager.GetNetworkCredentials().UserName; service.ClientCredentials.UserName.Password = ServiceCredentialsManager.GetNetworkCredentials().Password;

Клиент конфигурации -

<basicHttpBinding> 
    <binding name="BasicHttpsBinding_IDispatchService"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Windows" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
    <basicHttpsBinding> 
    <binding name="basicHttpsBindingMax" maxBufferSize="999999999" 
     maxReceivedMessageSize="999999999"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Windows" /> 
     </security> 
    </binding> 
    </basicHttpsBinding> 
</bindings> 

Служба конфигурации -

<system.serviceModel> 
     <bindings> 
     <basicHttpBinding> 
      <binding name="basicHttpsBinding"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Windows" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
     <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<protocolMapping> 
    <add binding="basicHttpsBinding" scheme="https" /> 
</protocolMapping> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 

+0

Вы настроили методы проверки подлинности, разрешенные в IIS? Кроме того, я только что использовал OperationContext.Current.ServiceSecurityContext, чтобы получить текущий идентификатор пользователя. Я не уверен, что это фактически то же самое, что вы уже делаете. – MattC

ответ

1

Обратите внимание, что для использования аутентификации Windows служба и клиентское приложение должны выполняться в том же домене Windows.

Также убедитесь, что в клиенте значения, которые вы назначаете, не являются пустыми. Как правило, пароль не доступен из кода при использовании проверки подлинности Windows.

Если клиент службы аутентифицирован с использованием проверки подлинности Windows, вероятно, вам не следует вручную передавать учетные данные службе. Процесс аутентификации должен обрабатываться автоматически WCF и не полагаться просто на отправку учетных данных, но, например, он может использовать билет Kerberos.

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

Update

После некоторых исследований я нашел несколько источников, предполагающих, что установка учетных данных клиентский код может позволить WCF для аутентификации из-за пределы домена:

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

+0

Проблема в том, что клиент сидит за пределами домена, поэтому мне нужно передать учетные данные пользователя службы на поведение клиента. Вот почему я устанавливаю учетные данные пользователя при выполнении служебного вызова. –

+1

Взгляните на это сообщение: https://devdump.wordpress.com/2009/04/29/wcf-windows-authentication-and-external-users/. Он использует похожий, но немного отличающийся код от того, который вы опубликовали. –

+1

Вот еще один пример кода для аналогичного случая (доступ к службе WCF из-за пределов домена): http://subbusspace.blogspot.com/2009/10/accessing-wshttp-wcf-service-from.html –

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