OVH Cloud OVH Cloud

Probleme d'authentification WebServices

8 réponses
Avatar
Mestayer
Bonjour,
Nous avons une architecture éclatée en plusieurs serveurs :
-1 serveur Web avec une application Web tournant dessus, utilisant une
authentification par formulaire(Win2003 et IIS6)
Cette application laisse l'accès anonyme autorisé au niveau d'IIS
-1 serveur AD sous Win2000 sur lequel est installé une application de type
WebService permettant l'accès à différentes fonctionnalitées de l'annuaire.
Sous IIS (version5 cette fois ci), l'authentification Windows intégré et
Digest sont activés, l'utilisateur anonyme est désactivé. Impersonate=true
dans le Web.config

J'appel mon WebService avec le code suivant :
CredentialCache cc=new CredentialCache();
NetworkCredential cred=new NetworkCredential(user,pass,domain);
cc.Add(proxyUrl,"Digest",cred);

MonWebService ws=new WebService();
ws.Credentials=cc;
ws.MaMethode();<-- Erreur 401!

Pourquoi cette erreur????

F.Mestayer

8 réponses

Avatar
Paul Bacelar
"Mestayer" wrote in message
news:
Bonjour,
Nous avons une architecture éclatée en plusieurs serveurs :
-1 serveur Web avec une application Web tournant dessus, utilisant une
authentification par formulaire(Win2003 et IIS6)
Cette application laisse l'accès anonyme autorisé au niveau d'IIS
-1 serveur AD sous Win2000 sur lequel est installé une application de type
WebService permettant l'accès à différentes fonctionnalitées de


l'annuaire.
Sous IIS (version5 cette fois ci), l'authentification Windows intégré et
Digest sont activés, l'utilisateur anonyme est désactivé. Impersonate=true
dans le Web.config

J'appel mon WebService avec le code suivant :
CredentialCache cc=new CredentialCache();
NetworkCredential cred=new NetworkCredential(user,pass,domain);
cc.Add(proxyUrl,"Digest",cred);

MonWebService ws=new WebService();
ws.CredentialsÌ;
ws.MaMethode();<-- Erreur 401!

Pourquoi cette erreur????

F.Mestayer




Avant le pourquoi, il y a le quoi.
En clair, quel est l'erreur retourné, ou l'exception lancé?

--
Paul Bacelar
Avatar
Mestayer
> > ws.MaMethode();<-- Erreur 401!



Plus précisément :
Une erreur de type SoapException
Erreur 401 : Accès refusé
lorsque j'appel n'importe quelle méthode du WebService
Avatar
Paul Bacelar
"Mestayer" wrote in message
news:
> > ws.MaMethode();<-- Erreur 401!

Plus précisément :
Une erreur de type SoapException
Erreur 401 : Accès refusé
lorsque j'appel n'importe quelle méthode du WebService



Utilisez un Sniffer réseau comme Ethreal pour savoir quels sont les messages
échangés et leur contenu.


--
Paul Bacelar
Avatar
Simon Mourier [MS]
En authentification intégrée, il suffit de faire

ws.Credentials = CredentialCache.DefaultCredentials;

Simon.
"Mestayer" a écrit dans le message de
news:
Bonjour,
Nous avons une architecture éclatée en plusieurs serveurs :
-1 serveur Web avec une application Web tournant dessus, utilisant une
authentification par formulaire(Win2003 et IIS6)
Cette application laisse l'accès anonyme autorisé au niveau d'IIS
-1 serveur AD sous Win2000 sur lequel est installé une application de type
WebService permettant l'accès à différentes fonctionnalitées de
l'annuaire.
Sous IIS (version5 cette fois ci), l'authentification Windows intégré et
Digest sont activés, l'utilisateur anonyme est désactivé. Impersonate=true
dans le Web.config

J'appel mon WebService avec le code suivant :
CredentialCache cc=new CredentialCache();
NetworkCredential cred=new NetworkCredential(user,pass,domain);
cc.Add(proxyUrl,"Digest",cred);

MonWebService ws=new WebService();
ws.CredentialsÌ;
ws.MaMethode();<-- Erreur 401!

Pourquoi cette erreur????

F.Mestayer



Avatar
Mestayer
Avec ethereal, l'échange montre que les informations d'identification sont
bien transmises en mode digest :

POST /adservices/adws.asmx HTTP/1.1
SOAPAction: "http://tempuri.org/GetIdentity"

Authorization: Digest
username="unJoliNom",realm="AdresseIPdeLaMachine",nonce="grosblabla",uri="/adservices/adws.asmx",blablabla
Content-Length: 427
Expect: 100-continue
Host: AdresseIPdeLaMachine

<?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetIdentity
xmlns="http://tempuri.org/"></GetIdentity></soap:Body></soap:Envelope>HTTP/1.1 401 Acc.s refus.

Server: Microsoft-IIS/5.0
blabla...
<li>Contexte.:<br> Un programme filtre est install. sur le serveur Web pour
v.rifier quels sont les utilisateurs qui se connectent au serveur.
L'authentification utilis.e pour se connecter au serveur a .t. rejet.e par ce
programme filtre.</p>
blabla...

Voilà, je ne comprends pas pourquoi je me fait débouter de la sorte.
Lorsque je tente d'appeler le service Web directement depuis un navigateur,
en fournissant un login/password valide, j'obtiens une page 401 avec comme
message :
HTTP 401.4 – Non autorisé : Autorisation refusée par le filtre Services
Internet (IIS)

Je suis perdu là ?!
Quel est donc ce filtre ?

Merci par avance pour votre aide
F.Mestayer
Avatar
Mestayer
Je suis en accès anonyme sur l'application Web, il n'y a donc aucune
information d'authentification à ce niveau là. Par contre, l'utilisateur
utilisant un formulaire pour se logger, je récupère ces infos et les utilise
ensuite pour accéder à un WebService qui lui n'autorise pas l'accès anonyme.
Et c'est ce WebService qui m'envoit bouler...
Doit y avoir une astuce qqe part, mais laquelle?
Avatar
Mestayer
En activant l'audit des échecs d'ouverture de session, il apparait que
lorsque j'essaye d'accéder au webservice, j'obtienne deux erreurs :
Une erreur n°681 :
Échec de l'ouverture de session sur le compte : unCompte
par : MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
depuis la station de travail : UNEMACHINE
Le code d'erreur est : 3221225578

Et une n°529 :
Échec d'accès :
Raison : Nom d'utilisateur inconnu ou mauvais mot de passe
Nom de l'utilisateur : unCompte
Domaine : UNDOMAINE
Type de session : 3
Processus d'ouverture de session : IIS
Package d'authentification : MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
Nom de station de travail : UNEMACHINE

Je sèche toujours...
Avatar
Jean-Marc Hilaire [MS]
ça peut-être parceque votre client webservice (le serveur 2003 si ma
compréhension est bonne) utilise un mode d'authent que le serveur 2000 ne
comprend pas, ce qui parait étrange puisque vous précisez digest. Pour
cerner le problème, configurer le serveur où réside le web service en basic
et décochez windows et digest, mapper l'authent basic sur votre domain,
changez votre code

cc.Add(proxyUrl,"Digest",cred);
devient
cc.Add(proxyUrl,"Basic",cred);

Relancer les services iis sur le serveur du webservice et réésayez.

Question subsidiaire pourquoi tenez vous tant à "digest" ?
"Mestayer" wrote in message
news:
Je suis en accès anonyme sur l'application Web, il n'y a donc aucune
information d'authentification à ce niveau là. Par contre, l'utilisateur
utilisant un formulaire pour se logger, je récupère ces infos et les
utilise
ensuite pour accéder à un WebService qui lui n'autorise pas l'accès
anonyme.
Et c'est ce WebService qui m'envoit bouler...
Doit y avoir une astuce qqe part, mais laquelle?