Как передать учетные данные из одного веб-сервиса в другой?

В настоящее время у меня есть приложение, которое вызывает веб-службу (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();

Код веб-службы 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, но у меня нет пароля для этого уровень.

2 ответа

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

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

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

Другие вопросы по тегам