C#とASP.NET MVCを使用してイントラネットサイトを開発しています。 1台のマシンにSQL Serverがあり、別のマシンでIISが実行されています。ユーザーにイントラネットサイトにアクセスしてもらい、ユーザーにプロンプトを表示せずにInternet Explorerがユーザーウィンドウの資格情報をIISに送信すると、これらがsqlサーバーに渡されます。
Kerberosダブルホップの問題を認識しており、これを回避しようとしています。現在、IEを取得してWindowsの資格情報をIISに渡し、正常に認証できます。 IISを取得してこれらの資格情報をSQL Serverに渡すことができず、代わりに、ドメインサービスアカウント "htu\srv-htu-iis"に設定されているアプリプールIDの下で現在要求が実行されます。
私のセットアップは次のとおりです。
Web.Config
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
<identity impersonate="true" />
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
接続文字列
connection string="data source=hturesbsqlp01;initial catalog=R2_Dev;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
IIS認証設定
Anonymous Authentication = Disabled
ASP.NET Impersonation = Enabled
Forms Authentication = Disabled
Windows Authentication = Enabled
IISアプリプールの設定
Managed Pipeline = Integrated
Identity = htu\srv-htu-iis (domain service account)
Active Directory設定
ドメインサービスアカウントhtu\srv-htu-iisには、サイトをアカウントに関連付けるサービスプリンシパル名が設定されています。
Active Directoryには
Allow Delagation to any service
SQL Serverは、独自のSQLドメインサービスアカウントで実行されています。
テスト
次のコードテストを実行しました。
System.Web.HttpContext.Current.User.Identity.Name
これは、サイトにアクセスしているユーザーのWindows資格情報を正しく返します
System.Security.Principal.WindowsIdentity.GetCurrent().Name
ドメインサービスアカウント「htu\srv-htu-iis」を返します。これは、アプリプールIDが実行されているものです。
誰が私が間違っている可能性があるかの指示を提供できますか?
将来、この質問を訪れる人には。 IIS Service ... doh!を再起動することでこれを解決しました。私の設定は問題なく、サービスの完全な再起動が必要です!