找不到SafeAccessTokenHandle,并且上下文中不存在WindowsIdentity

时间:2019-07-16 14:30:23

标签: c# impersonation .net-standard ef-core-2.2

当我启动应用程序(wpf)与特定用户创建数据库时,我试图模拟当前用户。

我正在尝试使用以下代码:


 [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
        int dwLogonType, int dwLogonProvider, out SafeAccessTokenHandle phToken);

        private SafeAccessTokenHandle safeAccessTokenHandle;

        public DbSet<ArchiveModelDb> Archives { get; set; }
        public DbSet<TagModelDb> Tags { get; set; }
        public DbSet<MediaModelDb> Medias { get; set; }
        public DbSet<UserModelDb> Users { get; set; }
        public DbSet<ConfigurationTable> Config { get; set; }

        public DbContextArchiving(DbContextOptions<DbContextArchiving> options) : base(options)
        {
            try
            {
                ConfigurationTable configurationTable;

                using (var context = Initialize.GetContext())
                {
                    configurationTable = context.Config.FirstOrDefault();
                }
                bool returnValue = LogonUser(configurationTable.UsernameArchiveUser, "ngroup.be", configurationTable.PasswordArchiveUser, 2, 0, out safeAccessTokenHandle);

                if (!returnValue)
                {
                    int ret = Marshal.GetLastWin32Error();
                    throw new System.ComponentModel.Win32Exception(ret);
                }

                WindowsIdentity.RunImpersonated(
                        safeAccessTokenHandle,
                        () =>
                        {
                           Database.Migrate();
                        }
                   );
                safeAccessTokenHandle.Close();
                safeAccessTokenHandle.Dispose();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

我将令牌块System.Security.Principal下载到WindowsIdentity和Microsoft.Win32.SafeHandles作为令牌。

当我尝试使用此解决方案时,由于我的代码中有下划线的一部分(如标题中的错误),因此无法启动该应用程序。

我尝试了其他解决方案,并下载了掘金软件包System.Security.Principal.Windows

有了这个软件包,我可以启动我的应用程序,但是我有一个例外 =>

Exception thrown: 'System.IO.FileNotFoundException' in Db.dll
An exception of type 'System.IO.FileNotFoundException' occurred in Db.dll 
but was not handled in user code
Impossible de charger le fichier ou l'assembly 
'System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a' ou une de ses dépendances. Le fichier 
spécifié est introuvable.

感谢您的回答

0 个答案:

没有答案