在我们的应用程序中,我们要在后台运行Web API排队作业。我们使用HangFire进行作业的后台处理。 Web API使用Windows身份验证。 Hangfire服务器配置为作为Windows服务运行。
我正在尝试将后台作业作为排队的同一用户执行。
我尝试传递WindowsIdentity.GetCurrent()(序列化并通过hangfire传递)抛出的异常是“用于模仿的无效令牌 - 它无法复制”
[HttpGet, Route("enq")]
public IHttpActionResult EnQueue(string country)
{
var curUser = System.Security.Principal.WindowsIdentity.GetCurrent();
var id = Hangfire.BackgroundJob.Enqueue(() => Services.Common.TestClass.Test(curUser , country));
return Ok(id);
}
遇到了一个叫WIN32 API method Logon user的方法。但由于这需要密码作为输入,不知道如何使用它。
以任何方式将后台作业作为排队的同一用户执行?
答案 0 :(得分:0)
可能的解决方案:
Windows Impersonation and duplicating tokens
https://blogs.msdn.microsoft.com/winsdk/2015/08/28/logon-as-a-user-without-a-password/
var upn = System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName;
WindowsIdentity s4u = new WindowsIdentity(upn);