OVH Cloud OVH Cloud

[WSSv2] Impersonation & Security validation

3 réponses
Avatar
Jean-Philippe V.
Bonjour,

Je développe une webpart permettant de créer et de supprimer des sous-sites.

Pour pouvoir le faire quelque soit les droits des utilisateurs, j'utilise
l'impersonation.

Tout fonctionne correctement lorsque la validation de la sécurité est
désactivée.

Par contre, lorsque la "security validation" est activée j'obtient une
exception :

Microsoft.SharePoint.SPException: La validation de la sécurité de cette page
n'est pas valide. Cliquez sur Précédente de votre navigateur et retentez
l'opération. ---> System.Runtime.InteropServices.COMException (0x8102006D):
La validation de la sécurité de cette page n'est pas valide. Cliquez sur
Précédente de votre navigateur et retentez l'opération. at
Microsoft.SharePoint.Library.SPRequestInternalClass.DeleteWeb(String bstrUrl)
at Microsoft.SharePoint.Library.a.f(String A_0) --- Fin de la trace de la
pile d'exception interne --- at Microsoft.SharePoint.Library.a.f(String A_0)
at Microsoft.SharePoint.SPWeb.Delete() at
Microsoft.SharePoint.SPWebCollection.Delete(String strWebUrl)

(ceci est pour la suppression d'un sous-site)

Après mes recherches sur le net, j'ai essayé diverses solutions, notamment
l'ajout d'un tag :

<SharePoint:FormDigest runat="server" />

ou encore le code :

SPGlobalAdmin globalAdmin = new SPGlobalAdmin();
Context.Items[SPGlobalAdmin.RequestFromAdminPort] = true;
Page.RegisterHiddenFiel("__REQUESTDIGEST",globalAdmin.AdminFormDigest);

mais rien n'y fait.

J'aimerais conserver un niveau de sécurité correct, aussi souhaiterais-je
activé la validation de la sécurité.

Serai-t-il possible, par exemple, de désactiver la "security validation"
juste le temps d'effectuer l'opération souhaitée, puis de la réactiver après ?

Avez-vous une autre idée ?

D'avance, merci.

Jean-Philippe V.
Développeur chez Odaxys (www.odaxys.fr)

3 réponses

Avatar
Renaud COMTE [MVP]
honnetement, permettre la suppression sans droit admin ....

Pourquoi ne pas simplment le proposer a ceux qui ont ces droits la ?
(je sais, je contourne mais c'est des op d'admin donc ...)

Renaud COMTE [MVP]
---------------------------------
http://blogs.developpeur.org/themit/
http://blog.spsclerics.com/

Bonjour,

Je développe une webpart permettant de créer et de supprimer des
sous-sites.

Pour pouvoir le faire quelque soit les droits des utilisateurs,
j'utilise l'impersonation.

Tout fonctionne correctement lorsque la validation de la sécurité est
désactivée.

Par contre, lorsque la "security validation" est activée j'obtient une
exception :

Microsoft.SharePoint.SPException: La validation de la sécurité de
cette page n'est pas valide. Cliquez sur Précédente de votre
navigateur et retentez l'opération. --->
System.Runtime.InteropServices.COMException (0x8102006D): La
validation de la sécurité de cette page n'est pas valide. Cliquez sur
Précédente de votre navigateur et retentez l'opération. at
Microsoft.SharePoint.Library.SPRequestInternalClass.DeleteWeb(String
bstrUrl) at Microsoft.SharePoint.Library.a.f(String A_0) --- Fin de la
trace de la pile d'exception interne --- at
Microsoft.SharePoint.Library.a.f(String A_0) at
Microsoft.SharePoint.SPWeb.Delete() at
Microsoft.SharePoint.SPWebCollection.Delete(String strWebUrl)

(ceci est pour la suppression d'un sous-site)

Après mes recherches sur le net, j'ai essayé diverses solutions,
notamment l'ajout d'un tag :

<SharePoint:FormDigest runat="server" />

ou encore le code :

SPGlobalAdmin globalAdmin = new SPGlobalAdmin();
Context.Items[SPGlobalAdmin.RequestFromAdminPort] = true;
Page.RegisterHiddenFiel("__REQUESTDIGEST",globalAdmin.AdminFormDigest)
;

mais rien n'y fait.

J'aimerais conserver un niveau de sécurité correct, aussi
souhaiterais-je activé la validation de la sécurité.

Serai-t-il possible, par exemple, de désactiver la "security
validation" juste le temps d'effectuer l'opération souhaitée, puis de
la réactiver après ?

Avez-vous une autre idée ?

D'avance, merci.

Jean-Philippe V.
Développeur chez Odaxys (www.odaxys.fr)


Avatar
Jean-Philippe V.
Oui, mais c'est un exemple. Mes recherches m'ont permis de voir qu'un grand
nombre de développeurs avaient le même problème. De plus, hormis le problème
de validation de la sécurité, l'impersonation fonctionne seulement de façon
partielle : si on est admin, l'impersonation en un autre admin fonctionne ;
si on est pas admin, alors l'impersonation ne fonctionne pas. Ce serait un
problème d'HttpContext.

Toute info serait la bienvenue.

Merci d'avance.

Jean-Philippe V.
Développeur ches Odaxys (www.odaxys.fr)

"Renaud COMTE [MVP]" a écrit :

honnetement, permettre la suppression sans droit admin ....

Pourquoi ne pas simplment le proposer a ceux qui ont ces droits la ?
(je sais, je contourne mais c'est des op d'admin donc ...)

Renaud COMTE [MVP]
---------------------------------
http://blogs.developpeur.org/themit/
http://blog.spsclerics.com/


Avatar
Eric Donneger
Bonjour,

Je rejoins Renaud sur le fait qu'il est risqué d'autoriser des actions
"admin" à quelqu'un qui ne l'est pas.
En revanche, si la question est plutôt de savoir comment facilement exécuter
du code nécessitant des droits d'admin indépendamment des droits de
l'utilisateur connecté, je vous invite à lire l'article "Secure SharePoint
Code Using Credential-less Impersonation" paru dans le premier numéro de
SharePointAdvisor.

Si vous n'avez pas la chance d'avoir reçu ce magazine, allez voir sur leur
site, le code est téléchargeable.

En substance l'idée c'est, le temps de l'action nécessitant des droits
admin, de désactiver l'impersonnification de SharePoint pour revenir dans le
contexte d'exécution du pool d'application (qui tourne forcément sous un
compte admin local du serveur). Facile mais fallait y penser.

--
Eric Donneger
http://blogs.developpeur.org/FatEric
http://www.clubsps.org


"Jean-Philippe V." a écrit :

Bonjour,

Je développe une webpart permettant de créer et de supprimer des sous-sites.

Pour pouvoir le faire quelque soit les droits des utilisateurs, j'utilise
l'impersonation.

Tout fonctionne correctement lorsque la validation de la sécurité est
désactivée.

Par contre, lorsque la "security validation" est activée j'obtient une
exception :

Microsoft.SharePoint.SPException: La validation de la sécurité de cette page
n'est pas valide. Cliquez sur Précédente de votre navigateur et retentez
l'opération. ---> System.Runtime.InteropServices.COMException (0x8102006D):
La validation de la sécurité de cette page n'est pas valide. Cliquez sur
Précédente de votre navigateur et retentez l'opération. at
Microsoft.SharePoint.Library.SPRequestInternalClass.DeleteWeb(String bstrUrl)
at Microsoft.SharePoint.Library.a.f(String A_0) --- Fin de la trace de la
pile d'exception interne --- at Microsoft.SharePoint.Library.a.f(String A_0)
at Microsoft.SharePoint.SPWeb.Delete() at
Microsoft.SharePoint.SPWebCollection.Delete(String strWebUrl)

(ceci est pour la suppression d'un sous-site)

Après mes recherches sur le net, j'ai essayé diverses solutions, notamment
l'ajout d'un tag :

<SharePoint:FormDigest runat="server" />

ou encore le code :

SPGlobalAdmin globalAdmin = new SPGlobalAdmin();
Context.Items[SPGlobalAdmin.RequestFromAdminPort] = true;
Page.RegisterHiddenFiel("__REQUESTDIGEST",globalAdmin.AdminFormDigest);

mais rien n'y fait.

J'aimerais conserver un niveau de sécurité correct, aussi souhaiterais-je
activé la validation de la sécurité.

Serai-t-il possible, par exemple, de désactiver la "security validation"
juste le temps d'effectuer l'opération souhaitée, puis de la réactiver après ?

Avez-vous une autre idée ?

D'avance, merci.

Jean-Philippe V.
Développeur chez Odaxys (www.odaxys.fr)