Сообщение об ошибке «Либо олицетворение не было предоставлено, либо олицетворение было недействительным» при доступе к объекту SPSite в SharePoint - PullRequest
0 голосов
/ 10 апреля 2020

При получении доступа к 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()
        {

        }
    }
}
'''



...