API Manager with .NET WCF services

0

I Have configured a .NET WCF service to work in API Manager and when I test with SoapUI it works as expected. Accessing from my client .NET application (updating only the URL in the binding) I get the following error. How do you pass the token from the .net client...I don't think there is a syste.servicemodel configuration item for this?

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.
api
wcf
web
token
asked on Stack Overflow Nov 7, 2018 by Jeffrey mark • edited Nov 7, 2018 by Nick

1 Answer

0

There are many ways to authenticate a WCF client, depending on the configuration of your server. How does your server authenticate the client? Or do you share details about sending requests using SOAPUI?

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"'.

As far as I know, if the server enable the http Basic authentication, we should provide the username credentials.

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

If you want to pass custom token or authentication information to server, you should add the custom header information to the SOAP message via OperationContext object or IClientMessageInspector interface.

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
Feel free to let me know if there is anything I can help with.

answered on Stack Overflow Nov 8, 2018 by Abraham Qian

User contributions licensed under CC BY-SA 3.0