1

В настоящее время у меня есть приложение, которое вызывает веб-службу (WS1), которая, в свою очередь, вызывает другую веб-службу (WS2) для получения/установки информации на сервере, размещенном на WS2. Я хотел бы иметь возможность передавать учетные данные пользователя в WS2 из WS1, как если бы приложение вызывало прямо в WS2. Есть ли способ сделать это?Как передать учетные данные из одной веб-службы в другую?

Это то, что я в настоящее время:

Код Применение:

BasicHttpBinding basicHttpBinding = 
    new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly); 

basicHttpBinding.Security.Transport.ClientCredentialType = 
    HttpClientCredentialType.Windows; 

basicHttpBinding.MaxReceivedMessageSize = 131072000; 

AppMgr.AppMgrSoapClient appMgr = 
    new AppMgr.AppMgrSoapClient(
     basicHttpBinding, 
     new EndpointAddress(@"http://SomeServer/Service.asmx")); 

appMgr.ClientCredentials.Windows.AllowedImpersonationLevel = 
    TokenImpersonationLevel.Impersonation; 

appMgr.ChannelFactory.Credentials.Windows.ClientCredential = 
    CredentialCache.DefaultNetworkCredentials; 

appMgr.SomeWebMethodCall(); 

Web Service 1 код (на 'SomeServer')

BasicHttpBinding basicHttpBinding = 
    new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly); 

basicHttpBinding.Security.Transport.ClientCredentialType = 
    HttpClientCredentialType.Windows; 

basicHttpBinding.MaxReceivedMessageSize = 131072000; 

WS2Service.WS2ServiceSoapClient myServiceReference = 
    new WS2Service.WS2ServiceSoapClient(
     basicHttpBinding, 
     new EndpointAddress(@"http://SomeOtherServer/AnotherService.asmx")); 

myServiceReference.ClientCredentials.Windows.AllowedImpersonationLevel = 
    TokenImpersonationLevel.Impersonation; 

myServiceReference.ChannelFactory.Credentials.Windows.ClientCredential = 
    CredentialCache.DefaultNetworkCredentials; 

Ее последняя строка в веб-службы код, который мне нужно изменить, я знаю это ... но я не знаю, что его установить ... Существует ClientCredentials.UserName, но у меня нет пароля на этом уровне.

+0

Используйте теги вместо добавления в свой заголовок таких вещей, как «C# .NET 3.0». –

+0

Я не знаю много о безопасности в WCF, но я думаю, ваша проблема заключается в 'AllowedImpersonationLevel'. Я бы попробовал это с помощью команды «TokenImpersonationLevel.Delegation» http://msdn.microsoft.com/en-us/library/system.security.principal.tokenimpersonationlevel.aspx –

+0

Я попробовал делегирование, я все еще получаю веб-пользователя, который начал услуг на стороне WS2. :( – Tizz

ответ

-3

Я не кодирую код на C#, но, похоже, что вы хотите отправить учетные данные, используя ваш вызов веб-службы.

Для этого вам необходимо добавить учетные данные в тело HTTP-запроса.

+3

Wow, 5 минут и -2. Я предполагаю, что это НЕ то, что вы хотите сделать. – Tizz

0

Обычно это делается с помощью централизованной службы аутентификации, такой как CAS (http://www.jasig.org/cas).