API Manager с сервисами .NET WCF - PullRequest
0 голосов
/ 08 ноября 2018

Я настроил службу .NET WCF для работы в API Manager, и когда я тестирую с SoapUI, она работает как положено. Получая доступ из моего клиентского приложения .NET (обновляя только URL в привязке), я получаю следующую ошибку. Как передать токен из .net-клиента ... Я не думаю, что для этого есть элемент конфигурации syste.servicemodel?

System.ServiceModel.Security.MessageSecurityException
  HResult=0x80131501
  Message=The HTTP request is unauthorized with client authentication scheme 'Basic'. The authentication header received from the server was 'OAuth2 realm="WSO2 API Manager", error="invalid token", error_description="The access token expired"'.
  Source=mscorlib
  StackTrace:
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at ConsoleApp4.ServiceReference1.IService1.GetData(Int32 value)
   at ConsoleApp4.ServiceReference1.Service1Client.GetData(Int32 value) in C:\DEV\ConsoleApp4\ConsoleApp4\Connected Services\ServiceReference1\Reference.cs:line 122
   at ConsoleApp4.Program.Main(String[] args) in C:\DEV\ConsoleApp4\ConsoleApp4\Program.cs:line 18

Inner Exception 1:
WebException: The remote server returned an error: (401) Unauthorized.

1 Ответ

0 голосов
/ 08 ноября 2018

Существует много способов аутентификации клиента WCF, в зависимости от конфигурации вашего сервера. Как ваш сервер аутентифицирует клиента? Или вы делитесь информацией об отправке запросов с использованием SOAPUI?

Сообщение = HTTP-запрос не авторизован при аутентификации клиента. Схема «Базовая». Заголовок аутентификации, полученный от сервера, был 'OAuth2 realm = "WSO2 API Manager", ошибка = "неверный токен", error_description = "Токен доступа истек" '.

Насколько мне известно, если на сервере включена аутентификация http Basic, мы должны предоставить учетные данные для имени пользователя.

ServiceReference3.ServiceClient client = new ServiceReference3.ServiceClient();
        client.ClientCredentials.UserName.UserName = "abrahamq";
        client.ClientCredentials.UserName.Password = "abcd1234!";

Если вы хотите передать пользовательский токен или информацию аутентификации на сервер, вы должны добавить информацию пользовательского заголовка к сообщению SOAP через объект OperationContext или интерфейс IClientMessageInspector.

https://social.msdn.microsoft.com/Forums/vstudio/en-US/f1f29779-0121-4499-a2bc-63ffe8025b21/wcf-security-soap-header
https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.dispatcher.iclientmessageinspector?redirectedfrom=MSDN&view=netframework-4.7.2
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...