Я потратил часы на странную «ошибку» в отношении веб-метода от веб-службы .NET, запрашивающей права пользователя информации AD.Sharepoint RunWithElevatedPrivileges vs Imersonation
Хорошей новостью является исправление ошибки, но я бы понял, почему коррекция эффективна.
Веб-метод с ошибкой является следующая:
public bool ValidateTask(string originatingUser)
{
SPUserToken userToken = null;
// get the System account for impersonation
string userToken = site.SystemAccount.UserToken;
using (SPSite rootSite = new SPSite(site.ID, userToken))
{
using (SPWeb web = rootSite.OpenWeb())
{
// get the domain name of the application pool of the web app
string servicesDomain =
StringUtilities.GetDomain(site.WebApplication.ApplicationPool.ManagedAccount.Username);
// get the domain name of the user
string accountsDomain = StringUtilities.GetDomain(originatingUser);
PrincipalContext ServicesDomainContext =
new PrincipalContext(ContextType.Domain, servicesDomain);
PrincipalContext AccountsDomainContext =
new PrincipalContext(ContextType.Domain, accountsDomain);
// COMException when the FindByIdentity is called because
// AccountsDomainContext.connectedServer throw exception
using (UserPrincipal usr =
UserPrincipal.FindByIdentity(AccountsDomainContext, IdentityType.SamAccountName, originatingUser))
{
// get user groups memberships
}
}
// check groups memberships and return the true or false
}
}
Веб-метод с коррекцией заключается в следующем:
======== ================================================== =================
В sharepoint, я думал, что Imperso и RunWithElevatedPrivilege произведет тот же результат. So Мои вопросы ares:
1 - Почему работает RunWithElevatedPrivilege?
2 Что такое учетные данные, когда мы повышаем привилегии в контексте WebMethod? Это учетная запись пула идентификаторов корней SharePoint Web Services?
3- Мы можем проследить учетные данные двух методов?
Thx для ответа. Мой файл asmx находится в папке шаблона \ layouts, а dll находится в GAC. Пользовательский токен - это учетная запись «sharepoint \ system». Но когда мы выдаем себя за новый SPSite (siteId, usertoken), у нас есть полные права в контексте sharepoint, но когда мы выполняем запросы в AD (или файловой системе), WindowsIdentity по-прежнему является текущим пользователем, вызывающим веб-службу. Вот почему RunWithElevatedPrivileges более мощный из-за новой Thread с ApplicationPoolidentity. – user1380787