2

私たちはクライアントが統合Windows認証を望むシステムを持っています。 これはASP.NET 3.5アプリケーションで、SQL Server 2005に接続しています。 WebサーバーはServer 2003 R2 SP2です。 dbサーバーはServer 2003 SP2(R2ではなく)です。 DBサーバで ASP.NET> SqlServer;信頼と委任

は、私は今、Windowsユーザーグループ 'MYDOMAIN \ MYUSERGROUP' に3人のユーザーを持って、次のスクリプト

exec sp_grantlogin 'myDomain\myUserGroup' 
USE myDbName 
exec sp_grantdbaccess 'myDomain\myUserGroup' 

を走りました。 3人のユーザーのすべてのアカウントは、委任のために信頼できるとマークされています。 ADのWebサーバーアカウントは、委任のために信頼されているとマークされます。

ウェブアプリケーションは、Windows認証を使用してマークされています(すべてオフになっています)。

<authentication mode="Windows" ></authentication> 
<identity impersonate="true" /> 
<authorization> 
    <deny users="?"/> 
</authorization> 

私は、ユーザー・グループにあるユーザーとWebアプリケーションに接続しようとすると、しかし、私はエラーを取得:

System.Data.SqlClient.SqlException: 
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. 

私 web.configファイルには、次の行を持っています私許可されたアカウントのHARD CODE 1は、web.configファイルに偽装する場合

ConnectionStringBuilder.DataSource = "MYDBSERVER" 
ConnectionStringBuilder.InitialCatalog = "MYDBCATALOG" 
ConnectionStringBuilder.IntegratedSecurity = True 

:接続文字列は、このように構成されたSQLのConnectionStringBuilderから構築されています>行が動作します。しかし、ハードコーディングされたアカウントを取り出して、クライアントのマシンからIDを渡そうとすると。私はエラーが発生します。

だから、私はマルチホップの統合ログインシナリオで正しく設定されていないようですが、何が分からないのでしょうか。

ありがとうございます!

答えて

2

Windows認証を使用している場合、偽装はASP.NETプロセス自体を通過しません。ここで2つのオプションがあります - 基本認証へのスワップ、IDのフロー、またはWin2003以降で実行している場合は、Kerberosとsome hackeryを使用して接続することができます

+0

私たちはクライアントのサイトで専用のWeb/DBサーバーを管理していますが、自分のドメインを管理することはできません。したがって、Basic Authを選択しました。そのドメインのADを変更する必要があるという政治に対処しようとするのではなく、 基本認証に切り替えます。あなたが述べたように、ログインは完全に流れ、私たちは今稼働しています。 感謝! – eidylon

+0

これも私の問題を解決することができた、ありがとう! これを機能させるには、基本認証をオンにするだけでなく、「統合Windows認証」もオフにする必要がありました。これは、両方のチェックを行っても機能しません。 – WebDude

3

ASPマシンは、 NTLM/Kerberos経由のIIS。認証は、元のユーザープロセス(IE)にIDを保証する秘密を提示するよう要求したドメインコントローラによって保証されます。ユーザーがボックスにログインしたときに入力したパスワードです。実際には、関連するプロセスではなく、関連する各マシンのローカルセキュリティ機関(LSA、別名lsass.exe)によって認証が行われます。 ASPマシン上のLSAは認証がOKであることを知っているため、リモートユーザーが前記LSAの制御下でアクセスする権利を持つものにアクセスすることを許可します(つまり、ローカルASPマシンのすべて)。

ユーザーを偽装するASPプロセスが新しいマシンに別のホップを作成すると、ASPマシン上のLSAによって制御された領域が残ります。 SQLマシン上のLSAは、ASPマシン上のLSAを信頼する理由がありません。だから、それはそれが主張している人物(偽装されたユーザー)であるという証拠を提示するよう頼んでいます。残念ながら、ASPマシンはユーザーの秘密(パスワード)を持っていないので、このような証明を提示することはできません。

回避策は「制約付き委任」と呼ばれるものです。制限された委任により、ドメインコントローラはSQLのマシンLSAとASPマシンLSAの間のネゴシエーションに介入し、「ASPマシンはOKです。私は彼に保証します」と言います。したがって、SQLのマシンLSAは認証を信頼し、元の偽装されたユーザーを認証します。制約付き委任を設定する方法

技術的な詳細が、これはいつでも「ダブルホップ」と偽装が関与している事実であることをHow To: Use Protocol Transition and Constrained Delegation in ASP.NET 2.0

ノートに記載されている、どんなには、関係リソースの種類は、(SQLサーバにすることができ、ファイル共有することができます、新しいバックエンドのASPサービスになることができます)。