powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF ORACLE олицетворение в домене
7 сообщений из 7, страница 1 из 1
WCF ORACLE олицетворение в домене
    #37623559
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано:
Есть WCF сервис (манина1), есть ORACLE (машина2), ну и клиент на третьей машине
Машины в одном домене.
WFC хостится в IIS (на WS2008)
Привязка netTcpBinding.
На методе стоит [OperationBehavior(Impersonation = ImpersonationOption.Required)]
на клиенте client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;
Сервер защищен сертификатом, а клиент хочу чтобы проходил аутентификацию Windows.

При некоторых настройках олицетворение даже срабатывает, т.е. в метода сервиса в WindowsIdentity.GetCurrent().Name нужный пользователь, но коннект к бд на другом серваке не происходит (ошибка - неверный логин / пароль), строка подключения правильная, т.к. спецом консольную прогу сделал для проверки, запускаю на машине1 (где wcf), коннект работает.

Почитал кучу топиков на эту тему, нигде не нашел решения
1. поставил для NETWORK_SERVICE (под ним работает сервис при привязке net.tcp) привелерию - "Act as part of the operation system". Не помогло
2. Пробую client.ClientCredentials.Windows.AllowNtlm = false получаю ошибку
Код: plaintext
1.
2.
3.
4.
5.
6.
Клиент не может определить основное имя службы на основании имени в 
конечном адресе "net.tcp://msk-wrq-02.card.magystral.local:809/PVSWebServiceGS/Service.svc" 
для SspiNegotiation/Kerberos. 
Имя, соответствующее целевому адресу, должно быть представлено 
в виде имени участника-пользователя (пример: acmedomain\alice) или 
основного имени службы (пример: host/bobs-machine).
На сервере
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
      <netTcpBinding>

        <!--Привязка для cервиса GS NET.TCP-->
        <binding name="NetTcpBinding_GS" closeTimeout="00:01:00"
                 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                 transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                 hostNameComparisonMode="StrongWildcard" listenBacklog="10"
                 maxBufferPoolSize="524288" maxBufferSize="2000000000" maxConnections="1000"
                 maxReceivedMessageSize="2000000000">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="10000000"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession enabled="true" />
          <security mode="Transport" >
            <transport clientCredentialType="Windows"  />            
          </security>
        </binding>
      </netTcpBinding>

      <serviceBehaviors>
        <behavior name="CertificateBehavior_GS">
          <!--<serviceAuthorization impersonateCallerForAllOperations="false" />-->
          
          <serviceCredentials>
            <windowsAuthentication  allowAnonymousLogons ="false" />
            </clientCertificate>-->
            <!-- Серийник сертификата сервера -->
            <serviceCertificate findValue="51 a1 77 13 aa 09 17 94 45 75 11 e5 d5 d5 21 21" x509FindType="FindBySerialNumber"
                                storeLocation="LocalMachine" storeName="My" />
          </serviceCredentials>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          
        </behavior>
      </serviceBehaviors>

    <services>
      <service name="Magystral.WebService.GS.GsService" behaviorConfiguration="CertificateBehavior_GS">

        <endpoint name="NetTcpEndpoint_GS" binding="netTcpBinding"                   
                  bindingConfiguration="NetTcpBinding_GS"
                  contract="Magystral.WebService.GS.IGsService" />

      </service>

    </services>



на клиенте
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
...
                  NetTcpBinding b = new NetTcpBinding(SecurityMode.Transport);
                  b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;                  
                  //b.Security.Message.ClientCredentialType = MessageCredentialType.Windows;                  
                  b.MaxReceivedMessageSize = 2000000000;
                  //b.MaxBufferSize = 2000000000;
                  b.ReaderQuotas.MaxArrayLength = 10000000;
                  b.ReliableSession.Enabled = true;
                  binding = b;
....

         var client = new GsServiceClient(c.Binding, c.Endpoint);
         client.ClientCredentials.ServiceCertificate.Authentication.TrustedStoreLocation =
             StoreLocation.LocalMachine;
         client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode =
             X509CertificateValidationMode.PeerTrust;

         client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;
         //client.ClientCredentials.Windows.AllowNtlm = false;
         //client.ClientCredentials.ClientCertificate.Certificate = c.ClientCertificate;
...
...
Рейтинг: 0 / 0
WCF ORACLE олицетворение в домене
    #37623569
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При копировании конфигов ошибся
запускается с TransportWithMessageCredential, олицентворяется но не логинется к БД

Какие еще шаманства нужно сделать. Нифига нету нормальной доки по WCF на MSDN :(, все примеры на локалхостах это вообще шедевры.
Наверняка кто то сталкивался с проблемой. Помогите разобраться.


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
      <netTcpBinding>
        <!--Привязка для cервиса GS NET.TCP-->
        <binding name="NetTcpBinding_GS" closeTimeout="00:01:00"
                 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                 transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                 hostNameComparisonMode="StrongWildcard" listenBacklog="10"
                 maxBufferPoolSize="524288" maxBufferSize="2000000000" maxConnections="1000"
                 maxReceivedMessageSize="2000000000">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="10000000"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession enabled="true" />
          <security mode="TransportWithMessageCredential" >
            <transport clientCredentialType="Windows"  />
            <message clientCredentialType="Windows"  />
          </security>
        </binding>
      </netTcpBinding>



Код: c#
1.
2.
3.
4.
                 NetTcpBinding b = new NetTcpBinding(SecurityMode.TransportWithMessageCredential);
                  b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;                  
                  b.Security.Message.ClientCredentialType = MessageCredentialType.Windows;                  
                  b.MaxReceivedMessageSize = 2000000000;
...
Рейтинг: 0 / 0
WCF ORACLE олицетворение в домене
    #37623750
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas,

так, какая ошибка то?
покажи ее.
...
Рейтинг: 0 / 0
WCF ORACLE олицетворение в домене
    #37623810
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiKbarrabas,

так, какая ошибка то?
покажи ее.

Одна ошибка (когда олицетворение происходит), как я описал выше, при подключении к БД, "неверный юзер и пароль" (он верный, тот же код подключения выполняется на серверной машине из обычного приложения, спецом проверил).

Вторая (когда пытаюсь настраивать (отключить например client.ClientCredentials.Windows.AllowNtlm = false)

ОшибкаКлиент не может определить основное имя службы на основании имени в
конечном адресе "net.tcp://msk-wrq-02.card.magystral.local:809/PVSWebServiceGS/Service.svc"
для SspiNegotiation/Kerberos.
Имя, соответствующее целевому адресу, должно быть представлено
в виде имени участника-пользователя (пример: acmedomain\alice) или
основного имени службы (пример: host/bobs-machine).
...
Рейтинг: 0 / 0
WCF ORACLE олицетворение в домене
    #37624190
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одна ошибка.
При использовании веб-криента (Web server тоже IIS и тоже на другой машине), не получается пробросить пользователя до WCF
В отладчике видно, что пользователь нужный (тот что логинелся в браузере по виндовой аутентификации), но при Open канала к WСF получаю "Подлинность вызывающего пользователя не была проверена службой."
Настройки клиента такиеже как в виндовой проге, еще в иис включено
<system.web>
<authentication mode="Windows" />
<identity impersonate="true"/>
</system.web>

Если отключить impersonate=false то сервис вызывается но отправляет, не нужного пользователя, а креденшин машины на котором ИИС хостится

Как вообще всё это настроить вместе :(???
...
Рейтинг: 0 / 0
WCF ORACLE олицетворение в домене
    #37624373
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabasЕще одна ошибка.
При использовании веб-криента (Web server тоже IIS и тоже на другой машине), не получается пробросить пользователя до WCF
В отладчике видно, что пользователь нужный (тот что логинелся в браузере по виндовой аутентификации), но при Open канала к WСF получаю "Подлинность вызывающего пользователя не была проверена службой."
Настройки клиента такиеже как в виндовой проге, еще в иис включено
<system.web>
<authentication mode="Windows" />
<identity impersonate="true"/>
</system.web>

Если отключить impersonate=false то сервис вызывается но отправляет, не нужного пользователя, а креденшин машины на котором ИИС хостится

Как вообще всё это настроить вместе :(???
К тому же WindowsIdentity.GetCurrent().ImpersonationLevel равен TokenImpersonationLevel.Impersonation, а мне нужне Delegation чтобы пробросить его на другую машину в WCF, а там под ним нужно законектится к оракле которая тоже на другой машине
Где настраивается в asp с каким уровнем олицетворения приходит пользователь ?
...
Рейтинг: 0 / 0
WCF ORACLE олицетворение в домене
    #37626355
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и не получилось ничего. никто не знает что ли?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF ORACLE олицетворение в домене
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]