外部 ADFS サーバーに接続するための IdentityServer セットアップがあります。OAuth2 / OpenId Connect 経由でログインしてアクセス トークンを取得できます。AspNet.Core WebApi は、IIS AppPool 内で実行され、Kerberos 委任が有効になっているユーザーが使用されます (インフラストラクチャに興味がないため、チェック方法がわからないはずです)。
私が達成したいのは、WebApi の IdentityServer から取得した ClaimsIdentity が、偽装を使用してパスワードなしで WindowsIdentity に変換されることです。ユーザー名だけで十分です。実際に偽装された WindowsIdentity を使用して、データベースにログオンし、いくつかの変更を行う必要があります。
これが可能かどうかはわかりませんが、かなり長い間これに苦労してきました。
これを偽装実装のベースとして使用しました。私が持っている唯一の問題は、 が a をContext.User.Identity
返さないことですが、 .WindowsIdentity
ClaimsIdentity
私が試した別のアプローチはvar user = new WindowsIdentity(username);
、ユーザー名が UPN になる場所を使用することです。ImpersonationLevel.Identity
これにより、代わりにを使用して ID が作成されますImpersonationLevel.Impersonated
。このユーザー アクセス トークンを使用して実行するWindowsIdentity.RunImpersonated()
と、必要なアセンブリをロードするときに Access Denied または IOException が発生します。
最初の質問: IIS AppPool ユーザーが正しい Kerberos 委任権限を持っているかどうかを確認するにはどうすればよいですか?
2 番目の質問: ユーザー名だけでユーザーになりすますことさえ可能ですか?