DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDernière intervention 6 juillet 2011
-
4 mai 2006 à 11:05
DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDernière intervention 6 juillet 2011
-
1 mars 2007 à 19:44
Bonjour,
Voici ma situation : j'ai un web service qui permet de partager un répertoire. Tout d'abord, je l'ai développé avec Visual Studio 2005. Tout marchait à la perfection. Le problème est survenu lorsque j'ai essayé de publier mon web service sur le serveur web IIS 5. La publication se fait sans problèmes mais à l'appel de ma méthode qui partage le répertoire, celle-ci me lance une exception qui me dit que l'accès est refusé (je ne sais pas à quel resource l'accès est refusé...).
Tout d'abord, j'ai pensé aux ACL du répertoire. Afin d'y remédier, j'ai ajouté le groupe d'utilisateur Tout le monde avec un contrôle total sur mon répertoire. Mais rien n'y fait, l'exception persiste.
C'est pourquoi je me suis dit que le problème venait de IIS qui n'a peut-être pas les autorisations nécessaires pour effectuer certaines tâches (systèmes). Le problème est que je ne maîtrise pas bien IIS et que je ne vois pas bien où aller pour autoriser mon web service à partager un répertoire.
Que dois-je faire ?
Merci d'avance pour vos réponses,
Seb.
PS: Je pense que j'ai le même problème lorsque je veux spécifier un mot de passe pour un utilisateur Active Directory (méthode Invoke("SetPassword", new object[] { "pwd" });). Le message de l'exception est également : Accès refusé. Cela renforce mon idée du problème d'autorisation dans IIS. Ceci dans le même web service que spécifié plus haut.
DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDernière intervention 6 juillet 2011 17 mai 2006 à 09:58
J'ai enfin trouvé la solution. Elle concerne effectivement l'impersonation. Il fallait la mettre dans le code vu que dans le fichier de config ou dans la console IIS ca ne fonctionnait pas.
Si quelqu'un est intéressé, je veux bien mettre les lignes de codes qui permettent d'effectuer une impersonation.
Petit détail, l'impersonation telle que je l'ai faite ne fonctionne qu'avec Windows Server 2003. Je veux dire par là que j'ai essayé sur un Windows 2000 Server ca ne donne rien. La sécurité a dû être revue dans la nouvelle version. Par contre je ne sais pas si c'est IIS 6 ou Windows Server 2003 qui fait fonctionner le tout.
Pour ce qui est de la fonction "SetPassword" du client ldap, l'impersonation ne change rien, je ne peux toujours pas appeller cette fonction (Access Denied). A défaut de cette fonction, j'utilise "ChangePassword" qui demande des droits moins pointus.
Je n'ai toujours pas d'utilisateur ASPNET. Je pense que cet utilisateur est ajouté automatiquement avec Visual Studio (plus précisément, avec le serveur de développement) mais, dans mon cas, Visual Studio n'est pas installé sur le serveur web. Je n'ai donc que les deux utilisateur cités ci-dessus.
zebobo5
Messages postés273Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 6 février 20091 5 mai 2006 à 14:19
Salut,
Ton webservice n'a pas les droits nécéssaires donc :
Vas dans l'administration IIS, sur les propriétés ASP.Net,"Edit configuration", de ton répertoire qui contient ton webservice,
là tu as un onglet "Application", avec une propriété "Role impersonation" où tu lui donne le nom et mot de passe d'un utilisateur ayant les droit que doit utiliser ton webservice.
DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDernière intervention 6 juillet 2011 8 mai 2006 à 11:36
Malheureusement, l'impersonation ne fonctionne pas. Je l'avais déjà essayée en tapant la ligne dans mon fichier web.config mais sans résultat. J'ai également essayé, comme tu me l'as conseillé, de le faire via la console IIS mais le même phénomène se produit : la connexion est interrompue (= message de l'exception).
Seb.
Vous n’avez pas trouvé la réponse que vous recherchez ?
DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDernière intervention 6 juillet 2011 13 mai 2006 à 08:02
Je n'ai pas d'utilisateur ASPNET. Les utilisateurs IIS sont IUSR_NomMachine et IWAM_NomMachine. J'ai déjà affecté tous les droits possibles à ces deux comptes mais rien ne change. Je les ai même fait agir en tant que système d'exploitation. Rien ne semble fonctionner.
phoenix_67
Messages postés1Date d'inscriptionjeudi 19 mai 2005StatutMembreDernière intervention19 février 2007 19 févr. 2007 à 13:21
Bonjour,
J'ai exactement le même problème que toi, j'ai un service web qui accède au réseau pour lister le contenu d'un répertoire.
En utilisant le mode déboguage de visual studio 2005 mon application fonctionne parfaitement, mais en utilisant le serveur iis5 je n'arrive pas à faire fonctionner mon application (en ajoutant au fichier de configuration web.config, mon application ne fonctionne pas; en faisant un Impersonate dans le code mon application ne fonctionne pas mieux).
J'aurais voulu savoir :
1) si vous êtes arriver à faire fonctionner votre service web sur iis5.
2) avez-vous modifier quelque chose (code, parametres) pour que votre service web fonctionne sur iis6?
3) je serrais intéresser par les lignes de code que vous avez utiliser pour l'impersonation.
Merci de vos réponses.
DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDernière intervention 6 juillet 2011 1 mars 2007 à 19:44
Avant toute chose, la programmation de cette application date de quelques temps. Je ne saurai donc pas assurer que ma réponse est totalement correcte!
1) Je ne pense pas être parvenu à faire fonctionner mes Web Services sur IIS 5.
2) Je ne me souviens pas avoir chnagé quelque chose en particulier pour faire fonctionner l'application sur IIS 6.
3) Voici la classe que j'ai écrite afin d'effectuer une impersonation :
using System;
using System.Data;
using System.Configuration;
using System.Runtime.InteropServices;
if (log == false)
{
int erreur = Marshal.GetLastWin32Error();
throw new Exception("Impossible de récupérer le jeton de l'utilisateur spécifié (code " + erreur + ")");
}
int Res;
Res = ImpersonateLoggedOnUser(hToken);
if (Res != 1)
{
throw new Exception("Impossible d'effectuer l'impersonation");
}
}
/// <summary>
/// Désactive une impersonation
/// </summary>
public static void desactiveImpers()
{
RevertToSelf();
}
}