OVH Cloud OVH Cloud

UnauthorizedAccessException DirectoryInfo

4 réponses
Avatar
ceoph
Bonjour,

Je cherche =E0 lister les fichiers qui sont stock=E9s sur un=20
serveur win 2000 =E0 partir d'une appli asp.net qui tourne=20
sur un autre serveur.
Je veut que mon appli utilise l'autentification windows=20
du client (modif du fichier web.config).

Voici mon code:

DirectoryInfo dir =3D new DirectoryInfo
(@"\\<serveurdistant>\rep_partag=E9\sousrep\");
FileInfo[] files =3D dir.GetFiles("*.txt");

Lorsque je sp=E9cifie un compte r=E9seau (windows) en dur=20
dans web.config, cela fonctionne. Lorsque je ne sp=E9cifie=20
pas de compte pour qu'il utilise le compte courant, ca ne=20
fonctionne pas. J'ai l'exception cit=E9e en objet.

Lorsque je recupere des fichiers qui se trouvent sur le=20
serveur asp.net il n'y a aucun souci, meme avec=20
l'identit=E9 courante.

Lorque j'appel ma page depuis le serveur asp.net pour=20
chercher des fichiers sur le serveur distant, ca=20
fonctionne aussi avec l'identit=E9 courante.

Mais lorsque j'appel la page d'un autre poste que le=20
serveur asp.net, et que je veut chercher des fichiers qui=20
sont sur une autre machine que le serveur asp.net, ca ne=20
fonctionne qu'en l'identit=E9 du web.config avec un=20
userName et un password.

Bien sur j'ai les droits de lister ces r=E9pertoires avec=20
l'identit=E9 courante. Je suis admins du domaine.

On dirais en fait que la transmission des droits ne se=20
fait plus entre le serveur asp.net et le serveur distant !

Est ce que quelqu'un a d=E9j=E0 eu ce pb ?
Est ce que je fais une fausse manip ?

Merci de vos r=E9actions ou =E9ventuelles r=E9ponse.

Ceoph

4 réponses

Avatar
Julien Adam
Par défaut, si tu ne spécifies pas de compte ce n'est pas le compte courant
qui est utilisé mais le compte ASPNET (sous windows 2000) ou NETWORK SERVICE
(sous windows 2003)du serveur web qui héberge les pages. Il faut donner les
droits à cet utilisateur.

Julien Adam

"ceoph" wrote in message
news:1ee301c46fd1$d170dfe0$
Bonjour,

Je cherche à lister les fichiers qui sont stockés sur un
serveur win 2000 à partir d'une appli asp.net qui tourne
sur un autre serveur.
Je veut que mon appli utilise l'autentification windows
du client (modif du fichier web.config).

Voici mon code:

DirectoryInfo dir = new DirectoryInfo
(@"<serveurdistant>rep_partagésousrep");
FileInfo[] files = dir.GetFiles("*.txt");

Lorsque je spécifie un compte réseau (windows) en dur
dans web.config, cela fonctionne. Lorsque je ne spécifie
pas de compte pour qu'il utilise le compte courant, ca ne
fonctionne pas. J'ai l'exception citée en objet.

Lorsque je recupere des fichiers qui se trouvent sur le
serveur asp.net il n'y a aucun souci, meme avec
l'identité courante.

Lorque j'appel ma page depuis le serveur asp.net pour
chercher des fichiers sur le serveur distant, ca
fonctionne aussi avec l'identité courante.

Mais lorsque j'appel la page d'un autre poste que le
serveur asp.net, et que je veut chercher des fichiers qui
sont sur une autre machine que le serveur asp.net, ca ne
fonctionne qu'en l'identité du web.config avec un
userName et un password.

Bien sur j'ai les droits de lister ces répertoires avec
l'identité courante. Je suis admins du domaine.

On dirais en fait que la transmission des droits ne se
fait plus entre le serveur asp.net et le serveur distant !

Est ce que quelqu'un a déjà eu ce pb ?
Est ce que je fais une fausse manip ?

Merci de vos réactions ou éventuelles réponse.

Ceoph
Avatar
ceoph
Quand je ne specifie pas de compte je laisse la balise
<identity impersonate="true" />
Donc, si je ne me trompe pas c'est le compte du client
qui est utilisé !
De plus, j'ai un message de trace qui appel
User.Identity.Name qui correspond bien au compte de
l'utilisateur distant.


-----Message d'origine-----
Par défaut, si tu ne spécifies pas de compte ce n'est


pas le compte courant
qui est utilisé mais le compte ASPNET (sous windows


2000) ou NETWORK SERVICE
(sous windows 2003)du serveur web qui héberge les pages.


Il faut donner les
droits à cet utilisateur.

Julien Adam

"ceoph" wrote in


message
news:1ee301c46fd1$d170dfe0$
Bonjour,

Je cherche à lister les fichiers qui sont stockés sur un
serveur win 2000 à partir d'une appli asp.net qui tourne
sur un autre serveur.
Je veut que mon appli utilise l'autentification windows
du client (modif du fichier web.config).

Voici mon code:

DirectoryInfo dir = new DirectoryInfo
(@"<serveurdistant>rep_partagésousrep");
FileInfo[] files = dir.GetFiles("*.txt");

Lorsque je spécifie un compte réseau (windows) en dur
dans web.config, cela fonctionne. Lorsque je ne spécifie
pas de compte pour qu'il utilise le compte courant, ca ne
fonctionne pas. J'ai l'exception citée en objet.

Lorsque je recupere des fichiers qui se trouvent sur le
serveur asp.net il n'y a aucun souci, meme avec
l'identité courante.

Lorque j'appel ma page depuis le serveur asp.net pour
chercher des fichiers sur le serveur distant, ca
fonctionne aussi avec l'identité courante.

Mais lorsque j'appel la page d'un autre poste que le
serveur asp.net, et que je veut chercher des fichiers qui
sont sur une autre machine que le serveur asp.net, ca ne
fonctionne qu'en l'identité du web.config avec un
userName et un password.

Bien sur j'ai les droits de lister ces répertoires avec
l'identité courante. Je suis admins du domaine.

On dirais en fait que la transmission des droits ne se
fait plus entre le serveur asp.net et le serveur


distant !

Est ce que quelqu'un a déjà eu ce pb ?
Est ce que je fais une fausse manip ?

Merci de vos réactions ou éventuelles réponse.

Ceoph



.



Avatar
Julien Adam
User.Identity.Name ne permet pas de vérifier sous quel utilisateur le
process tourne. Il donne simplement le nom de la personne authentifiée pour
cette session ASP.NET. Dans certaines conditions (Windows authentication
activée et impersonation=true sans username/password) il est vrai que les
deux sont égaux mais ce n'est pas une vérité générale. Essaye ça plutot :

Trace.Write("Running under the " +
System.Security.Principal.WindowsIdentity.GetCurrent().Name + " account");

Sinon je dirais que ça devrait marcher, essaye de tracer le problème avec
des outils comme tokenmon ou filemon pour voir les fichiers ouverts et les
logins utilisés. (http://www.sysinternals.com)

Bon celà dit je ne suis pas sur que ça soit top au niveau sécurité tout ça.
Une application web qui tourne sous l'utilisateur Admin du domaine ça ne
sonne pas juste ...

Julien

"ceoph" wrote in message
news:1f9201c46fe6$95743a40$
Quand je ne specifie pas de compte je laisse la balise
<identity impersonate="true" />
Donc, si je ne me trompe pas c'est le compte du client
qui est utilisé !
De plus, j'ai un message de trace qui appel
User.Identity.Name qui correspond bien au compte de
l'utilisateur distant.


-----Message d'origine-----
Par défaut, si tu ne spécifies pas de compte ce n'est


pas le compte courant
qui est utilisé mais le compte ASPNET (sous windows


2000) ou NETWORK SERVICE
(sous windows 2003)du serveur web qui héberge les pages.


Il faut donner les
droits à cet utilisateur.

Julien Adam

"ceoph" wrote in


message
news:1ee301c46fd1$d170dfe0$
Bonjour,

Je cherche à lister les fichiers qui sont stockés sur un
serveur win 2000 à partir d'une appli asp.net qui tourne
sur un autre serveur.
Je veut que mon appli utilise l'autentification windows
du client (modif du fichier web.config).

Voici mon code:

DirectoryInfo dir = new DirectoryInfo
(@"<serveurdistant>rep_partagésousrep");
FileInfo[] files = dir.GetFiles("*.txt");

Lorsque je spécifie un compte réseau (windows) en dur
dans web.config, cela fonctionne. Lorsque je ne spécifie
pas de compte pour qu'il utilise le compte courant, ca ne
fonctionne pas. J'ai l'exception citée en objet.

Lorsque je recupere des fichiers qui se trouvent sur le
serveur asp.net il n'y a aucun souci, meme avec
l'identité courante.

Lorque j'appel ma page depuis le serveur asp.net pour
chercher des fichiers sur le serveur distant, ca
fonctionne aussi avec l'identité courante.

Mais lorsque j'appel la page d'un autre poste que le
serveur asp.net, et que je veut chercher des fichiers qui
sont sur une autre machine que le serveur asp.net, ca ne
fonctionne qu'en l'identité du web.config avec un
userName et un password.

Bien sur j'ai les droits de lister ces répertoires avec
l'identité courante. Je suis admins du domaine.

On dirais en fait que la transmission des droits ne se
fait plus entre le serveur asp.net et le serveur


distant !

Est ce que quelqu'un a déjà eu ce pb ?
Est ce que je fais une fausse manip ?

Merci de vos réactions ou éventuelles réponse.

Ceoph



.



Avatar
J'ai utilisé filemon, effectivement j'ai un access
denied !
System.Security.Principal.WindowsIdentity.GetCurrent
().Name me donne bien le nom de l'utilisateur distant !
Je vois aussi ce nom dans filemon en option
Je ne comprend tjs pas pb j'ai ce pb alors que pour
l'accès à une base de données c'est pareil et là ca
fonctionne.

quand au fait d'utiliser les droits du client, je suis
sur un intranet et c'est une appli d'administration, c'es
t pourquoi je ne veut pas avoir en dur un compte dans le
web.config !

-----Message d'origine-----
User.Identity.Name ne permet pas de vérifier sous quel


utilisateur le
process tourne. Il donne simplement le nom de la


personne authentifiée pour
cette session ASP.NET. Dans certaines conditions


(Windows authentication
activée et impersonation=true sans username/password) il


est vrai que les
deux sont égaux mais ce n'est pas une vérité générale.


Essaye ça plutot :

Trace.Write("Running under the " +
System.Security.Principal.WindowsIdentity.GetCurrent


().Name + " account");

Sinon je dirais que ça devrait marcher, essaye de tracer


le problème avec
des outils comme tokenmon ou filemon pour voir les


fichiers ouverts et les
logins utilisés. (http://www.sysinternals.com)

Bon celà dit je ne suis pas sur que ça soit top au


niveau sécurité tout ça.
Une application web qui tourne sous l'utilisateur Admin


du domaine ça ne
sonne pas juste ...

Julien

"ceoph" wrote in


message
news:1f9201c46fe6$95743a40$
Quand je ne specifie pas de compte je laisse la balise
<identity impersonate="true" />
Donc, si je ne me trompe pas c'est le compte du client
qui est utilisé !
De plus, j'ai un message de trace qui appel
User.Identity.Name qui correspond bien au compte de
l'utilisateur distant.


-----Message d'origine-----
Par défaut, si tu ne spécifies pas de compte ce n'est


pas le compte courant
qui est utilisé mais le compte ASPNET (sous windows


2000) ou NETWORK SERVICE
(sous windows 2003)du serveur web qui héberge les pages.


Il faut donner les
droits à cet utilisateur.

Julien Adam

"ceoph" wrote in


message
news:1ee301c46fd1$d170dfe0$
Bonjour,

Je cherche à lister les fichiers qui sont stockés sur un
serveur win 2000 à partir d'une appli asp.net qui tourne
sur un autre serveur.
Je veut que mon appli utilise l'autentification windows
du client (modif du fichier web.config).

Voici mon code:

DirectoryInfo dir = new DirectoryInfo
(@"<serveurdistant>rep_partagésousrep");
FileInfo[] files = dir.GetFiles("*.txt");

Lorsque je spécifie un compte réseau (windows) en dur
dans web.config, cela fonctionne. Lorsque je ne spécifie
pas de compte pour qu'il utilise le compte courant, ca




ne
fonctionne pas. J'ai l'exception citée en objet.

Lorsque je recupere des fichiers qui se trouvent sur le
serveur asp.net il n'y a aucun souci, meme avec
l'identité courante.

Lorque j'appel ma page depuis le serveur asp.net pour
chercher des fichiers sur le serveur distant, ca
fonctionne aussi avec l'identité courante.

Mais lorsque j'appel la page d'un autre poste que le
serveur asp.net, et que je veut chercher des fichiers




qui
sont sur une autre machine que le serveur asp.net, ca ne
fonctionne qu'en l'identité du web.config avec un
userName et un password.

Bien sur j'ai les droits de lister ces répertoires avec
l'identité courante. Je suis admins du domaine.

On dirais en fait que la transmission des droits ne se
fait plus entre le serveur asp.net et le serveur


distant !

Est ce que quelqu'un a déjà eu ce pb ?
Est ce que je fais une fausse manip ?

Merci de vos réactions ou éventuelles réponse.

Ceoph



.





.