私は過去にSharePointで偽装を行ってきましたが、これは次のようなことです。パスワードを入力せずにSharePointで偽装検索を実行できますか?
SPWeb web = SPContext.Current.Web;
string currentWebUrl = web.Url;
SPUser user = web.EnsureUser(loginToImpersonate);
using (SPSite site = new SPSite(currentWebUrl, user.UserToken)
{
using (SPWeb impersonatedWeb = site.OpenWeb())
{
// Any SharePoint access here to 'impersonatedWeb'
// is impersonated as 'loginToImpersonate'
}
}
偽装するユーザーのパスワードは必要ありませんが、実行するには特定のコードアクセスセキュリティが必要です。さらに、EnsureUserコールでは、現在のユーザーが管理者である必要がありますが、SPUserオブジェクトを取得するためにEnsureUserの代わりに使用できる他のメソッドがあります。
これでステージを設定しました...今、MOSSまたはWSSクエリエンジンに対してFullTextSQLQueryまたはKeywordQueryを実行し、偽装されたユーザーに基づいてセキュリティトリミング結果を取得します。どちらのオブジェクトもコンストラクタでSPSiteを使用できますが、私の偽装ロジックは無視されます。代わりに、現在ログインしているユーザー(HTTPContext.Current.User)と一緒に移動します。
他のコンストラクタもあります:アプリケーション名(文字列)、MOSSにはSSPへのServerContextがありますが、これらはまったく役に立ちません。
ReflectorをKeywordQueryクラスとその基本Queryクラスで使用しましたが、かなり醜いです。私は、ユーザーを決定する実際のロジックが管理されていないコードでダウンしていると考えています。
私はこれを行うことができますか?
作業リンク:http://www.threewill.com/2010/06/connect-to-sharepoint-forwarding-user-identities/ – KjellSj