Как передать учетные данные из одного веб-сервиса в другой? - PullRequest
1 голос
/ 25 января 2012

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

0 голосов
/ 20 мая 2013

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

0 голосов
/ 25 января 2012

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

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

...