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