7

わかりました、この問題を解決するために約 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 . 各ステップの後、アプリケーションの動作に変化がないかチェックしましたが、何も見つかりませんでした。

要約すると、次のことを行いました。

  1. アプリケーション プールを実行するためのドメイン ユーザー アカウントをセットアップしました。テストのために、このユーザーを Domain Admins グループのメンバーにしました。
  2. web.config の行を<add key="aspnet:AllowAnonymousImpersonation" value="false" />(本当でした) に変更しました。これにより、NT AUTHORITY\IUSR ユーザーはアプリケーションを実行できなくなり、アプリケーション プールを実行するために作成したドメイン アカウントでアプリケーションが実行されました。SharePoint にログインして WebPart にアクセスできるようになりましたが、予想どおり、認証されたドメイン ユーザーではなく、アプリケーション プールを実行しているドメイン ユーザーの AD 情報が表示されました。したがって、WebPartが機能していて、必要な権限などを持っていることはわかっていSystem.Security.Principal.WindowsIdentity.GetCurrent().Name;ますが、アプリプールを実行しているユーザーをまだ返しています。偽装はまだ機能していません
  3. Trust this computer for delegation to any serviceAD ユーザーとコンピューターでは、これがすべて実行される仮想サーバーに付与しました。
  4. アプリ プールを実行しているドメイン ユーザー アカウントの [委任] タブがなかったため、ユーザーの SPN を登録する必要がありました。サーバーの SPN リストからコピーしたすべての SPN と、オンラインで見つけたいくつかの http SPN を登録Trust this user for delegation to any serviceし、ユーザーを設定しても、アプリケーションの動作に変化はありませんでした。
  5. ログインしているドメイン ユーザーが委任から保護されていないことを確認しました
  6. SharePoint サーバーのローカル ポリシー エディターにアクセスし、アプリケーション プールを実行しているドメイン ユーザーが「オペレーティング システムの一部として機能する」ことと「認証後にクライアントを偽装する」ことが許可されていることを確認しました。
  7. 私が試した他のこと
    • Negotiate:KerberosIIS 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 パーツを変更する必要はありません。さらに重要なのは、これが正しい方法であり、動作させることができるはずです。私はそれを継続的に回避する必要はありません。

誰かが問題の原因についてさらに考えを持っている場合は、ぜひ聞いてみたい.

4

1 に答える 1

1

まだ問題があるかどうかわからない場合は、次の投稿が役立つかもしれません。 ASP.NET 4 でのダブル ホップ偽装、プロトコル遷移、および制約付き委任

于 2012-10-10T19:20:32.760 に答える