0

私は、要求しているユーザーをコードで偽装する 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 が正しいことがわかっています。

その後、「ビジネス ロジック」アセンブリは、信頼できる接続呼び出しを実際に実行する別のアセンブリを呼び出します。この「データ アクセス」アセンブリを変更することはできません。このアセンブリによっても認証例外が報告されます。

4

2 に答える 2

3

@John Sonmezが正しいと思います.Double Hopの問題にぶつかっています. なりすましは話の半分にすぎません。委任についても検討する必要があります (ネットワークで Kerberos 認証を使用していると仮定します)。以下の記事は、同じ問題を解決するのに最も役立ちました

なりすましと委任

ASP.NET 委任

于 2008-12-19T22:49:28.700 に答える
0

以前に ASP.NET で偽装を使用したことがある (C# を使用し、ファイルシステムにアクセスする) ことは知っていますが、currentWindowsIdentity.Impersonate()を含むロジックを 'Using / End Using' (明示的にコード ブロックのセキュリティ コンテキストを定義します)。

したがって、次のようになります。

Using impersonationContext = currentWindowsIdentity.Impersonate() 
' Logic here 
End Using
于 2008-12-19T22:30:43.357 に答える