Я новичок в WCF и его безопасности, поэтому искал помощь по проблеме, с которой я столкнулся.
У меня есть служба WCF, которую нужно развернуть на каждой машине в небольшом домене. Служба WCF должна размещаться в службе Windows, поскольку в ней есть методы, которые необходимо вызывать с повышенными правами. На данный момент сервис очень черновой (он предоставляет метаданные - но я считаю, что это должно быть отключено позже - возможно ли это?). Он использует привязку net.tcp - App.Config службы показан ниже:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="SvcBehavior" name="Microsoft.ServiceModel.Samples.Svc">
<endpoint address="" binding="netTcpBinding"
contract="Microsoft.ServiceModel.Samples.ISvc" />
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://*:8100/ServiceModelSamples/service" />
</baseAddresses>
<timeouts closeTimeout="00:10:00" openTimeout="00:10:00" />
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="SvcBehavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Для клиента у меня есть приложение Winforms C #. Приложение выполняет 2 функции, оно извлекает статическую информацию из службы, а затем дает пользователю возможность аутентифицироваться и вызывать административные методы. Поэтому аутентификация выполняется на уровне клиента.
Я использую Channelfactory для подключения к сервису, так как имя хоста является переменным (у пользователя запрашивается его при запуске клиента), а файл app.config для клиента показан ниже - он практически пуст:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
</bindings>
<client />
</system.serviceModel>
</configuration>
Код канала:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace = "http://Microsoft.ServiceModel.Samples", ConfigurationName = "ISvc")]
ChannelFactory<ISvc> myChannelFactory = new ChannelFactory<ISvc>(new NetTcpBinding(), "net.tcp://" + HostName + ":8100/ServiceModelSamples/service");
public static ISvc client = null;
У меня есть интерфейс, который описывает методы службы.
Основная проблема, с которой я столкнулся, заключается в следующем. Скажем, есть Machine1 и Machine2 , работающие на domainA . Предположим, что Machine1 обслуживает службу, а Machine2 запускает клиент.
Когда я подключаюсь к службе, используя учетную запись домена domainA \ User , служба работает нормально, но говорят, что у меня есть локальный пользователь на Machine2 и я хочу подключиться к службе как Machine2 \ LocalUser , я получаю следующее сообщение об ошибке:
Сервер отклонил учетные данные клиента.
Я попытался поэкспериментировать с установкой режима безопасности на ноль (не то, что я хотел бы сделать), но затем я получаю сообщение о том, что клиент и служба имеют несоответствие конфигурации.
Что я могу сделать, чтобы это исправить? Кроме того, что произойдет, если служба, работающая в domainA \ Machine1 , была вызвана пользователем из другого домена - скажем, domainB \ User2 ?
Заранее спасибо - я хотел бы получить представление об этом!
1050 * Chada *