わかりました、この問題を解決するために約 15 時間を費やしましたが、解決するためにここに投稿することを最終的に辞任しました。この投稿が非常に長いことは承知していますが、試してみるように言われる通常のことはすべて行ったので、時間を無駄にしないように明確にしたいと思います.
ESXi 5.0 サーバーでホストされている Win Server 2008 R2 仮想マシンがあります。このサーバーには、SharePoint Foundation 2013 プレビューとすべての前提条件などをインストールしました。使用量が非常に限られており、約 30 人のユーザーしかいないため、この 1 つのサーバー (MSSQL、IIS 7.5、SharePoint サービス) からすべてを実行しています。SharePoint に追加する必要があったことの 1 つは、ユーザーが Active Directory (Server 2003) で自分の情報を変更できる機能です。これは、AD がほとんど存在せず、時代遅れであるためです。私は完璧な WebPart を見つけました。それはユーザーの編集に非常に役立ちます。
問題は、ユーザーが自分自身のみを編集できるように WebPart を構成したいときに発生します。WebPart は (適切に) C#.NET で次のコード行を使用します。IIS の Windows 認証で認証された、現在ログインしている ID を取得します。ただし、これはローカル ユーザーの NT AUTHORITY/IUSR を返します。(これは誰にとってもニュースではないことを私は知っています)。
System.Security.Principal.WindowsIdentity.GetCurrent().Name;
そこで私は調査を開始し、次のことを確認しました。
SharePoint の web.config には、次のものがあります。
<authentication mode="Windows" />
<identity impersonate="true" />
IIS では、SharePoint インストールを格納する IIS Web サイトに対して次の認証設定を使用しています。
Anonymous Authentication Disabled
ASP.NET Impersonation Enabled
Basic Authentication Disabled HTTP 401 Challenge
Digest Authentication Disabled HTTP 401 Challenge
Forms Authentication Disabled HTTP 302 Login/Redirect
Windows Authentication Enabled HTTP 401 Challenge
したがって、匿名認証を無効にしているにもかかわらず、サイトがまだ匿名ユーザーでログインしていることがわかります。私の問題に一致するダブルホップの問題に関する情報に出会い、このリンクに出会い、この投稿のすべての指示に従いました: http://blogs.technet.com/b/taraj/archive/2009/01/29 /checklist-for-double-hop-issues-iis-and-sql-server.aspx . 各ステップの後、アプリケーションの動作に変化がないかチェックしましたが、何も見つかりませんでした。
要約すると、次のことを行いました。
- アプリケーション プールを実行するためのドメイン ユーザー アカウントをセットアップしました。テストのために、このユーザーを Domain Admins グループのメンバーにしました。
- web.config の行を
<add key="aspnet:AllowAnonymousImpersonation" value="false" />
(本当でした) に変更しました。これにより、NT AUTHORITY\IUSR ユーザーはアプリケーションを実行できなくなり、アプリケーション プールを実行するために作成したドメイン アカウントでアプリケーションが実行されました。SharePoint にログインして WebPart にアクセスできるようになりましたが、予想どおり、認証されたドメイン ユーザーではなく、アプリケーション プールを実行しているドメイン ユーザーの AD 情報が表示されました。したがって、WebPartが機能していて、必要な権限などを持っていることはわかっていSystem.Security.Principal.WindowsIdentity.GetCurrent().Name;
ますが、アプリプールを実行しているユーザーをまだ返しています。偽装はまだ機能していません Trust this computer for delegation to any service
AD ユーザーとコンピューターでは、これがすべて実行される仮想サーバーに付与しました。- アプリ プールを実行しているドメイン ユーザー アカウントの [委任] タブがなかったため、ユーザーの SPN を登録する必要がありました。サーバーの SPN リストからコピーしたすべての SPN と、オンラインで見つけたいくつかの http SPN を登録
Trust this user for delegation to any service
し、ユーザーを設定しても、アプリケーションの動作に変化はありませんでした。 - ログインしているドメイン ユーザーが委任から保護されていないことを確認しました
- SharePoint サーバーのローカル ポリシー エディターにアクセスし、アプリケーション プールを実行しているドメイン ユーザーが「オペレーティング システムの一部として機能する」ことと「認証後にクライアントを偽装する」ことが許可されていることを確認しました。
- 私が試した他のこと
Negotiate:Kerberos
IIS Web サイトで Windows Auth の認証プロバイダーとして追加する- SharePoint web.config に次の 2 行が存在することを確認しました。
以下は、DC 上の SPN レコードです。
setspn -l SPserver
Registered ServicePrincipalNames for CN=SPserver,CN=Computers,DC=DOMAIN,DC=local:
MSSQLSvc/SPserver.DOMAIN.local:appPoolUser
WSMAN/SPserver
WSMAN/SPserver.DOMAIN.local
TERMSRV/SPserver
TERMSRV/SPserver.DOMAIN.local
RestrictedKrbHost/SPserver
HOST/SPserver
RestrictedKrbHost/SPserver.DOMAIN.local
HOST/SPserver.DOMAIN.local
setspn -l appPoolUser
Registered ServicePrincipalNames for CN=appPoolUser,OU=Utility,OU=Users,OU=Company Name,DC=DOMAIN,DC=local:
http/subdomain.domain.com
http/SPserver.DOMAIN.local
RestrictedKrbHost/appPoolUser.DOMAIN.local
RestrictedKrbHost/appPoolUser
MSSQLSvc/appPoolUser.DOMAIN.local:appPoolUser
HOST/appPoolUser
HOST/appPoolUser.DOMAIN.local
このプロセスでも、サーバーと IIS を数回再起動しました。それでもログインすると、Web パーツは私をアプリケーション プールを実行しているユーザーとして識別します。クラシック モードのアプリ プールを使用するなどの回避策があることは知っていますが、非推奨です。.NET で正しい名前を取得する方法は他にもありますが、Web パーツを変更する必要はありません。さらに重要なのは、これが正しい方法であり、動作させることができるはずです。私はそれを継続的に回避する必要はありません。
誰かが問題の原因についてさらに考えを持っている場合は、ぜひ聞いてみたい.