2010-04-30 6 views
0

J'ai un service Web basé sur Java qui nécessite une authentification de base pour communiquer avec lui. Si je tape l'URL WSDL dans mon navigateur, je suis invité pour l'authentification de base. Ce que je peux obtenir en entrant les informations d'identification correctes. Cependant, l'utilisation de mon client WCF ne fonctionne pas.Pourquoi Basic Auth ne fonctionne pas avec mon client WCF au service Web Java SOAP?

Je construis mon client WCF comme ceci:

var binding = new BasicHttpBinding 
{ 
    MaxReceivedMessageSize = 2048 * 10240, 
    Security = { 
    Mode = BasicHttpSecurityMode.TransportCredentialOnly, 
    Transport = { 
     ClientCredentialType = HttpClientCredentialType.Basic, 
     Realm = "MYREALM", 
     ProxyCredentialType = HttpProxyCredentialType.None 
    }, 
    Message = { 
     ClientCredentialType = BasicHttpMessageCredentialType.UserName, 
     AlgorithmSuite = SecurityAlgorithmSuite.Default 
    } 
    } 
}; 

var client = new WebServiceClient(binding, endpoint); 
client.ClientCredentials.UserName.UserName = username; 
client.ClientCredentials.UserName.Password = password; 
client.DoWebServiceMethod(); 

je reçois l'exception suivante.

System.Net.WebException: The remote server returned an error: (401) Unauthorized. 
at System.Net.HttpWebRequest.GetResponse() 
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 
System.ServiceModel.Security.MessageSecurityException: The HTTP request is unauthorized with client authentication scheme 'Basic'. The authentication header received from the server was 'Basic realm="MYREALM"'. 

D'après ce que je peux dire, je fais les choses correctement. Où vais-je mal?

Répondre

1

Je viens d'installer la même chose - j'ai ajouté une référence de service dans Visual Studio, et il est sorti similaire à ce que vous avez fait dans le code. Cependant, deux notes, bien que le mode de sécurité = "Transport" ait été correctement défini, il n'y avait pas clientCredentialType = "Basic". J'ai ajouté à cela ma config et cela n'a toujours pas fonctionné. Ensuite, je fait retiré la sécurité des messages depuis le service que je suis en contact avec le protocole SSL + de base seulement:

<message clientCredentialType="UserName" algorithmSuite="Default" /> 

Voila - cela a fonctionné. Je ne sais pas pourquoi cela a eu un effet étant donné que l'élément ne spécifiait pas la sécurité au niveau des messages ... mais c'était le cas.