私は、要求しているユーザーをコードで偽装する ASP.NET ページに取り組んでいます。次のコードを使用して、なりすましを開始します。
Dim impersonationContext As System.Security.Principal.WindowsImpersonationContext
Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
currentWindowsIdentity = CType(User.Identity, System.Security.Principal.WindowsIdentity)
impersonationContext = currentWindowsIdentity.Impersonate()
この後、以下を呼び出して、アプリケーションが適切なコンテキストで実行されていることを検証しました。
System.Security.Principal.WindowsIdentity.GetCurrent().Name
これにより、ユーザーの適切な ID が返され、ファイル アクセスやその他の項目がユーザーのアカウントを使用しているように見えます。ただし、Microsoft アプリケーション データ アプリケーション ブロック SqlHelper クラスを使用して、信頼できる接続認証を使用してデータベースを呼び出すと、「NT AUTHORITY\ANONYMOUS LOGON」ユーザーの認証が失敗します。
失敗した後、現在の ID がまだ目的のアカウントであり、ANONYMOUS LOGIN アカウントではないことを再検証できます。
これがなぜなのか誰にも分かりますか?または、より具体的には、どのように回避できますか?
これらのページからの呼び出しがどのように機能するかについての追加情報を編集します。
.aspx ページから偽装呼び出しを行います。
偽装した後、参照される「ビジネス ロジック」アセンブリを呼び出します。
ここでもコンテキスト ID が正しいことがわかっています。
その後、「ビジネス ロジック」アセンブリは、信頼できる接続呼び出しを実際に実行する別のアセンブリを呼び出します。この「データ アクセス」アセンブリを変更することはできません。このアセンブリによっても認証例外が報告されます。