3

SharePoint 2007 ボックスで ASP.NET Web アプリケーションをホストしています。これは、Sharepoint に対して Web サービス呼び出しを行い、ドキュメントの場所 (具体的には GetListItems メソッド) を取得します。

サービスは、適切なアクセス許可を持つ有効な SharePoint アカウントの渡された資格情報で使用されます。

ListServiceWrapper listService = new ListServiceWrapper();

/*Pass credentials to service call object*/
listService.Credentials = new NetworkCredential(spUserName, spPassword, spDomain);

/*Set the Url property of the service for the path to a subsite.*/
listService.Url = ConfigurationManager.AppSettings.Get("rootSite") + "/_vti_bin/lists.asmx";

Web アプリが開発ボックスでローカルに実行されている場合 (私は同じドメインの SharePoint ユーザーです)、サービス呼び出しはうまく機能します。Sharepoint ボックスに展開されると、アプリケーションは次を返します。

リクエストは HTTP ステータス 401: Unauthorized で失敗しました。

Sharepoint ボックスの Web アプリのアプリケーション プール ユーザーを許可された SharePoint ユーザーに変更しようとしましたが、まだ成功していません。Sharepoint 認証を NTLM ではなく Kerberos に変更すれば、問題は解決すると思います。残念ながら、それはここではオプションではありません。これは、NLTM ダブルホップの問題と関係があるのでしょうか?

4

1 に答える 1

3

はい、これはダブル ホップの問題に関連しています。
NTLM では、リモート サービスへの認証は許可されていません。あなたが言ったように、資格情報を他のサービスに委任するには Kerberos が必要です。

あなたが試すことができるオプション:

  • ケルベロスに切り替えます。これが唯一の正しい解決策ですが、すべての SPN を作成し、ポート 88 が開いていることを確認する必要があるため、簡単ではありません。
  • ASP.Net アプリケーションを SharePoint ボックスにインストールし、 DisableLoopbackCheckを有効にします。
  • サービス アカウントを使用して SharePoint にログインします。この場合、SharePoint はユーザー アカウントで実行されないため、自分でセキュリティを処理する必要があります。
于 2008-11-04T19:59:01.473 に答える