web-dev-qa-db-ja.com

IISを取得して、イントラネット環境でWindowsユーザーをSQLサーバーに偽装する

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=&quot;data source=hturesbsqlp01;initial catalog=R2_Dev;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;"

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が実行されているものです。

誰が私が間違っている可能性があるかの指示を提供できますか?

27
oceanexplorer

将来、この質問を訪れる人には。 IIS Service ... doh!を再起動することでこれを解決しました。私の設定は問題なく、サービスの完全な再起動が必要です!

15
oceanexplorer