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