このアプリケーションには、バックグラウンドで実行されるWebAPIキューイングジョブがあります。ジョブのバックグラウンド処理にはHangFireを使用します。WebAPIは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);
}
WIN32APIメソッドのログオンユーザーを呼び出すアプローチに出くわしました。ただし、パスワードを入力として使用するため、使用方法がわかりません。
バックグラウンドジョブをキューに入れたのと同じユーザーとして実行する方法はありますか?
可能な解決策:
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);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加