J'ai fait un peu usurpation d'identité dans SharePoint dans le passé en faisant quelque chose comme ce qui suit.Pouvez-vous effectuer une recherche avec emprunt d'identité dans SharePoint sans fournir de mot de passe?
SPWeb web = SPContext.Current.Web;
string currentWebUrl = web.Url;
SPUser user = web.EnsureUser(loginToImpersonate);
using (SPSite site = new SPSite(currentWebUrl, user.UserToken)
{
using (SPWeb impersonatedWeb = site.OpenWeb())
{
// Any SharePoint access here to 'impersonatedWeb'
// is impersonated as 'loginToImpersonate'
}
}
Notez que cela ne nécessite pas le mot de passe de l'utilisateur que vous empruntez l'identité, mais ne nécessite certaine sécurité d'accès au code à exécuter. En remarque, l'appel EnsureUser requiert également que l'utilisateur actuel soit un administrateur, mais il existe d'autres méthodes qui peuvent être utilisées à la place de EnsureUser pour obtenir l'objet SPUser (en essayant de garder mon fragment de code simple pour cette question). Maintenant que j'ai défini la scène ... Je veux maintenant faire une requête FullTextSQLQuery ou une requête KeywordQuery contre le moteur de requête MOSS ou WSS et obtenir des résultats de sécurité en fonction d'un utilisateur emprunté. Les deux objets peuvent prendre un SPSite sur le constructeur, mais ignorer ma logique d'emprunt d'identité. Ils vont plutôt avec l'utilisateur actuellement connecté (HTTPContext.Current.User).
Il existe également d'autres constructeurs: nom de l'application (chaîne) et pour MOSS, il y en a un avec un ServerContext pour le SSP, mais je ne pense pas que cela puisse vraiment être utile.
J'ai utilisé Reflector sur la classe KeywordQuery et sa classe Query de base, ce qui est plutôt moche. Je crois que la logique réelle qui détermine l'utilisateur est en panne de code non géré.
Alors, est-ce que je peux le faire?
Lien de travail: http://www.threewill.com/2010/06/connect-to-sharepoint-forwarding-user-identities/ – KjellSj