3

現在、Sharepoint サーバーでこの WinForms アプリケーションを開発していますが、完成したプログラムはドメイン上の任意のコンピューターから機能する予定です。私は WSS Web サービスを使用して、Sharepoint から使用するすべての情報を取得しています。

Sharepoint Permission マスクをチェックするコードをいくつか書きましたが、マスクに対する論理 OR を使用して、それがカバーするすべての権限を確認しましたが、現在のユーザーの Sharepoint マスクを返すのに問題があります。ユーザーが Windows 認証を介して直接ログインできるようにしたいので、これは私の当面のアイデアでした。

NetworkCredential credentails = CredentialCache.DefaultNetworkCredentials;
var userInfo = userGroupService.GetUserInfo(credentails.UserName);

ただし、DefaultNetworkCredentials(次のスニペットのように) SharePoint サイト全体のアクセス許可コレクションを返すことはできますが、プロパティは空の文字列であるため、それを使用して UserName を取得することはできません。

permissionService.Credentials = CredentialCache.DefaultNetworkCredentials;
permissionService.Url = "http://localhost/mySite/_vti_bin/Permissions.asmx";
// Web service request works
XmlNode node = permissionService.GetPermissionCollection(siteName, "Web");
// But I need to identify current user from this collection somehow still

Windows 認証がダブルホップの問題に悩まされていることを読みましたが、これは回避したいのですが、Sharepoint と IIS が実行されているサーバーで開発しているため、これがすぐに問題を引き起こすことはわかりません。

これを回避する方法、または現在のユーザーのアクセス許可マスクを取得するより良い方法はありますか?

4

2 に答える 2

0

認証が1つのリモートホストを超えて移動できないという問題に対処しています。これは「ワンホップ」制限として知られています。

これを克服するには、「制約付き委任」に入る必要があります。この場合、コンピューター/アカウントは、別のコンピューター/アカウントから認証資格情報を受信および受け入れることが明示的に許可されています。これは、委任のいずれかの「端」で適切なサービスプリンシパル名(SPN)を定義することにより、ActiveDirectoryで設定されます。

制約付き委任の詳細については、こちらをご覧ください。

幸運を!CDはセットアップが少し面倒な場合があるので、慎重に踏みます。

于 2012-07-28T04:38:50.870 に答える