OVH Cloud OVH Cloud

[WSS003] System.Net.WebPermission pb

1 réponse
Avatar
SD
Bonjour,
Voilà mon pb:

J'ai un programme exe (signé) qui à l'ouverture d'une session d'un
utilisateur Windows va interagir avec les web services WSS2003.
Cet exe est lancé de façon artificielle avec les privilèges admin , à la
fois admin de la machine de l'utilisateur et à la fois admin de WSS2003
(compte du pool WSS + admin du site), donc normalement pas de pbs de droits.
Dans cet exe je suis amené à récupérer la liste complète des sites
sharepoint, en gros :
// Accès au web service "http://...../_vti_bin/Webs.asmx", mode statique
Webs oWebs= new Webs();
oWebs.Credentials = System.Net.CredentialCache.DefaultCredentials; //
récupère le compte d'exécution du process
//oWebs.Credentials = oNC;
oWebs.Url = Utils.Site + Utils.WebsServiceName;
XmlNode xn = oWebs.GetAllSubWebCollection();

Or lors de l'appel de la méthode GetAllSubWebCollection(), j'ai l'exception
suivante :
Échec de la demande pour une autorisation de type System.Net.WebPermission,
Syst
em, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
mscorlib
at System.Security.CodeAccessSecurityEngine.CheckHelper(PermissionSet
granted
Set, PermissionSet deniedSet, CodeAccessPermission demand, PermissionToken
permT
oken)
at System.Security.CodeAccessSecurityEngine.Check(PermissionToken
permToken,
CodeAccessPermission demand, StackCrawlMark& stackMark, Int32 checkFrames,
Int32
unrestrictedOverride)
at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission
cap, S
tackCrawlMark& stackMark)
at System.Security.CodeAccessPermission.Demand()
at System.Net.HttpRequestCreator.Create(Uri Uri)
at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
at System.Net.WebRequest.Create(Uri requestUri)
at System.Web.Services.Protocols.WebClientProtocol.GetWebRequest(Uri uri)
at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebRequest(Uri
uri)

at System.Web.Services.Protocols.SoapHttpClientProtocol.GetWebRequest(Uri
uri
)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String
methodN
ame, Object[] parameters)
at ManageWebFolders.Webs.Webs.GetAllSubWebCollection()
at
ACFCIHexagone.ManageWebFolders.ManageWebFolders.GetWebCollection(String sU
rl, Hashtable ht)

J'ai bien conscience qu'il s'agit d'un pb de sécurité, mais je ne sais pas
trop ou agir.

Des idées ?

Merci par avance.

Cdt,

SD

1 réponse

Avatar
SD
Nous avons trouvé la solution (grace à Santos, il se reconnaitra).
Le tout est de bien paramétrer les jeus autorisations pour l'assembly au
niveau du Framework 1.1 ou 2.0 du poste client.
La procédure:
______________________________________________________________
Créez un groupe de codes pour attribuer les autorisations pour l'assembly

Avertissement Cette solution de contournement peut rendre votre ordinateur
ou votre réseau plus vulnérable aux attaques d'utilisateurs malintentionnés
ou de logiciels nuisibles tels que les virus. Cette solution de
contournement n'est pas recommandée ; nous vous indiquons toutefois la
marche à suivre si vous souhaitez l'appliquer. Vous devez assumer tous les
risques liés à cette solution de contournement.

Un groupe de codes détermine si un assembly correspond au critère défini par
l'administrateur qui est qualifié d'une condition d'appartenance. Si
l'assembly correspond, le groupe de codes accorde les autorisations ensemble
associées à groupe de codes à assembly.

Pour créer un groupe de codes :

1.
Cliquez sur Démarrer, pointez sur Paramètres et puis cliquez sur Panneau de
configuration. La fenêtre Panneau de configuration s'affiche.

2.
Double-cliquez sur Outils d'administration. La fenêtre Outils
d'administration s'affiche.

3.
Dans le Microsoft Visual Studio .NET 2002, double-cliquez sur Configuration
de Microsoft .NET Framework. La fenêtre .NET Framework Configuration
s'affiche.

Pour Microsoft Visual Studio .NET 2003, double-cliquez sur Configuration de
Microsoft .NET Framework 1.1. La fenêtre .NET Configuration 1.1 s'affiche.

Dans le Microsoft Visual Studio 2005, double-cliquez sur Microsoft .NET
Framework 2.0 Configuration. La fenêtre .NET Framework 2.0 Configuration
s'affiche.

4.
Dans le volet gauche, développez Stratégie de sécurité du runtime,
développez Machine et développez puis Code Groups.

5.
Cliquez avec le bouton droit sur All Code et cliquez sur Nouvelle.
L'Assistant Create Code Group s'affiche.

6.
Vérifiez que Create a new code group est sélectionné
MyUserControlCodeGroup, dans la zone Nom tape et cliquez ensuite, sur
Suivant. La page Choose a condition type apparaît.

7.
Dans la liste Choisissez le type de condition pour ce groupe de codes,
cliquez sur Nom fort.

8.
Cliquez sur Importer. La boîte de dialogue Import Strong Name From Assembly
s'affiche.

9.
Vous recherchez le fichier UserControl.dll dans lequel vous avez créé the "
vous Créez un contrôle utilisateur Windows en utilisant Microsoft .NET
Visual C# ou Microsoft section 2005 " Visual C# et vous puis cliquez sur
Ouvrir.

10.
Cliquez sur le Suivant. La page Assign a Permission Set to the Code Group
apparaît.

11.
Cliquez sur Utiliser un jeu d'autorisations existant, sélectionnez
FullTrust dans la liste et cliquez ensuite, sur Suivant. La page Completing
the Wizard apparaît.

12.
Cliquez sur Terminer pour fermer l'Assistant Create Code Group.
__________________________________________________________________

@+++

SD


"SD" a écrit dans le message de news:

Bonjour,
Voilà mon pb:

J'ai un programme exe (signé) qui à l'ouverture d'une session d'un
utilisateur Windows va interagir avec les web services WSS2003.
Cet exe est lancé de façon artificielle avec les privilèges admin , à la
fois admin de la machine de l'utilisateur et à la fois admin de WSS2003
(compte du pool WSS + admin du site), donc normalement pas de pbs de
droits.
Dans cet exe je suis amené à récupérer la liste complète des sites
sharepoint, en gros :
// Accès au web service "http://...../_vti_bin/Webs.asmx", mode
statique
Webs oWebs= new Webs();
oWebs.Credentials = System.Net.CredentialCache.DefaultCredentials; //
récupère le compte d'exécution du process
//oWebs.Credentials = oNC;
oWebs.Url = Utils.Site + Utils.WebsServiceName;
XmlNode xn = oWebs.GetAllSubWebCollection();

Or lors de l'appel de la méthode GetAllSubWebCollection(), j'ai
l'exception
suivante :
Échec de la demande pour une autorisation de type
System.Net.WebPermission,
Syst
em, Version=1.0.5000.0, Culture=neutral, PublicKeyToken·7a5c561934e089.
mscorlib
at System.Security.CodeAccessSecurityEngine.CheckHelper(PermissionSet
granted
Set, PermissionSet deniedSet, CodeAccessPermission demand, PermissionToken
permT
oken)
at System.Security.CodeAccessSecurityEngine.Check(PermissionToken
permToken,
CodeAccessPermission demand, StackCrawlMark& stackMark, Int32 checkFrames,
Int32
unrestrictedOverride)
at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission
cap, S
tackCrawlMark& stackMark)
at System.Security.CodeAccessPermission.Demand()
at System.Net.HttpRequestCreator.Create(Uri Uri)
at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
at System.Net.WebRequest.Create(Uri requestUri)
at System.Web.Services.Protocols.WebClientProtocol.GetWebRequest(Uri
uri)
at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebRequest(Uri
uri)

at
System.Web.Services.Protocols.SoapHttpClientProtocol.GetWebRequest(Uri
uri
)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String
methodN
ame, Object[] parameters)
at ManageWebFolders.Webs.Webs.GetAllSubWebCollection()
at
ACFCIHexagone.ManageWebFolders.ManageWebFolders.GetWebCollection(String sU
rl, Hashtable ht)

J'ai bien conscience qu'il s'agit d'un pb de sécurité, mais je ne sais pas
trop ou agir.

Des idées ?

Merci par avance.

Cdt,

SD