Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF ORACLE олицетворение в домене / 7 сообщений из 7, страница 1 из 1
20.01.2012, 10:41
    #37623559
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF ORACLE олицетворение в домене
Дано:
Есть 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
20.01.2012, 10:48
    #37623569
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF ORACLE олицетворение в домене
При копировании конфигов ошибся
запускается с 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
20.01.2012, 12:21
    #37623750
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF ORACLE олицетворение в домене
barrabas,

так, какая ошибка то?
покажи ее.
...
Рейтинг: 0 / 0
20.01.2012, 12:48
    #37623810
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF ORACLE олицетворение в домене
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
20.01.2012, 14:45
    #37624190
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF ORACLE олицетворение в домене
Еще одна ошибка.
При использовании веб-криента (Web server тоже IIS и тоже на другой машине), не получается пробросить пользователя до WCF
В отладчике видно, что пользователь нужный (тот что логинелся в браузере по виндовой аутентификации), но при Open канала к WСF получаю "Подлинность вызывающего пользователя не была проверена службой."
Настройки клиента такиеже как в виндовой проге, еще в иис включено
<system.web>
<authentication mode="Windows" />
<identity impersonate="true"/>
</system.web>

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

Как вообще всё это настроить вместе :(???
...
Рейтинг: 0 / 0
20.01.2012, 16:18
    #37624373
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF ORACLE олицетворение в домене
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
23.01.2012, 08:39
    #37626355
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF ORACLE олицетворение в домене
Так и не получилось ничего. никто не знает что ли?
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF ORACLE олицетворение в домене / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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