Déploiement d'un web service dans IIS 5 [Résolu]

Signaler
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011
-
DjAdes
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011
-
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.

9 réponses

Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011

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.

Merci de votre aide,
Seb.
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
1
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.

<hr>ZeBobo5
N'oubliez pas de cloturer votre post.
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011

Merci pour ta réponse,
J'essairai cela lundi car je n'ai pas accès au serveur le week-end.

Seb.
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011

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.
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
Est-ce que l'utilisateur ASPNET à les droits ?

::|The S@ib|:: MVP C#.NET
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011

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.

Seb.
Messages postés
5
Date d'inscription
mardi 16 mai 2006
Statut
Membre
Dernière intervention
26 juin 2006

Il faut permettre à ASP.net d’emprunter une identité Windows (IUSR_machine et IWAM_machine). Dans le WebConfig, ajoute la ligne

<
identity


impersonate
=
"True"/>
Messages postés
1
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
19 février 2007

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.
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011

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;

//using System.Web;
//using System.Web.Security;
//using System.Web.UI;
//using System.Web.UI.WebControls;
//using System.Web.UI.WebControls.WebParts;
//using System.Web.UI.HtmlControls;

/// <summary>
/// Classe permettant d'effectuer simplement une impersonation
/// </summary>
public class Impersonation
{
[DllImport("Advapi32.dll")]
private static extern bool LogonUser(
string lpszUsername,
string lpszDomain,
string lpszPassword,
Int32 dwLogonType,
Int32 dwLogonProvider,
out Int32 phToken
);

[DllImport("Advapi32.dll")]
private static extern int ImpersonateLoggedOnUser(
Int32 Token);

[DllImport("Advapi32.dll")]
private static extern int RevertToSelf();

/// <summary>
/// Active l'impersonation
/// </summary>
/// Nom de l'utilisateur auquel on va emprunter l'identité


/// Mot de passe de l'utilisateur


public static void activeImpers(string utilisateur, string pass)
{
// Try to impersonate
Int32 hToken;
bool log;

log = LogonUser(
utilisateur,
null,
pass,
2,
0,
out hToken
);

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();
}
}

J'espère avoir répondu assez clairement.

Seb.