При получении доступа к SPSite, т. Е. С использованием (SPSite site = new SPSite ("SiteUrl")), я получаю сообщение "Либо имитация не была предоставлена, либо данная имитация была недействительной".
Сценарий 1) Я вошел в систему на компьютере, например, с учетной записью разработчика, имеющей права администратора и пользователя удаленного рабочего стола. 2) Я пытаюсь получить доступ с помощью (SPSite site = new SPSite ("SiteUrl")) с учетной записью администратора ( admin - это глобальный администратор, имеющий все права доступа.
Фактическое поведение 1) Выдает ошибку, о которой я упоминал 2) После выполнения кода newId.Impersonate () я могу видеть учетную запись администратора, только если вижу Windowsidentity.GetCurrent ( ). Имя по-прежнему выдает ошибку при выполнении с помощью (SPSite site = new SPSite ("SiteUrl")) 3) Тот же код работает абсолютно нормально, если я вхожу в систему с учетной записью администратора. 4) проверено также с SPSecurity.RunWithElevatedPermission, но ошибка при получении веб-приложения не найдена.
Есть идеи, что не так в приведенном ниже коде? Пожалуйста, помогите мне, я борюсь со многими днями.
//program.cs
using (UserImpersonation2 user = new UserImpersonation2())
{
using (WindowsImpersonationContext ctx = user.Impersonate())
{
using (SPSite site = new SPSite("SiteUrl"))
{
}
}
}
//UserImpersonation2.cs
using System.Runtime.InteropServices;
using System;
using System.Security.Principal;
namespace ConsoleApp2
{
public class UserImpersonation2 : IDisposable
{
// You should include System.Runtime.InteropServices
[DllImport(@"c:\Windows\System32\advapi32.dll")]
public static extern bool LogonUser(string lpszUserName,
string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out int phToken);
public WindowsImpersonationContext Impersonate()
{
string user = "admin";
string password = "test123";
string machine = "developer";
int returnedToken;
// Try to log on.
if (LogonUser(user, machine, password, 3, 0, out returnedToken))
{
IntPtr token = new IntPtr(returnedToken);
WindowsIdentity newId = new WindowsIdentity(token, "WindowsAuthentication");
var _windowsImpersonationContext = newId.Impersonate();
return _windowsImpersonationContext;
}
return null;
}
public void Dispose()
{
}
}
}
'''