2009-03-30 7 views
1

私は、_layoutsディレクトリ下の自分のsharepointボックスとそのSOAPサービスを使用するシッククライアントでSOAP Webサービスを実行しています。基本認証を使用する1つのSharepointボックスと、クライアント証明書を使用するもう1つのSharepointボックスがあります。ドキュメントライブラリ内のいくつかのリストアイテムを更新するにはSOAPサービスが必要です。私が持っている問題は、昇格された特権ブロック内で実行しない限り、何も動作していないようです。ここで私がしようとしていることのコードスニペットです。SharePoint上で実行されているSOAP Webサービス

using (SPSite site = new SPSite(fileUrl)) 
using (SPWeb web = site.OpenWeb()) { 
    // web.CurrentUser is always null unless in elevated privileges block. 
    // do something with document library... 
    web.Files.Add(...); // fails with access denied unless in elevated privileges block. 
} 

私はまた、「SPContext.Current.Web」を試してみましたが、それは私が昇格した権限にいる場合でも、「web.CurrentUser」にnullを返しますブロック。

私は実際には昇格された特権ブロックを使用できません。なぜなら、ユーザーはSOAPサービスの接触にシステムによって変更されたものがあると不平を言うからです。私たちは、次のようなコードを使用しているシッククライアントから

...

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestString); 
if(basicAuth) { 
    request.Credentials = System.Net.CredentialCache.DefaultCredentials; 
} 
else { 
    X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
    store.Open(OpenFlags.ReadOnly); 
    foreach (X509Certificate2 certificate in store.Certificates) { 
     request.ClientCertificates.Add(certificate); 
} 
request.GetResponse(); 

我々は手動で様々な理由のためにSOAPリクエストを構築しています。

+0

WebサービスのWebアプリケーションIDアカウントのセキュリティについて詳しく説明できますか? – Nat

+0

質問を更新しました。 – joegtp

+0

リストの操作にビルトインのSharePoint Webサービスを使用できますか? – Zach

答えて

1

あなたのWebサービスがSharepointのコンテキスト内に正しく統合されるようにする(つまり、「現在の共有ポイントユーザー」を照会できる)場合は、_vti_bin(12のハイブのISAPIサブフォルダ)に展開する必要があります。 。

ディスカバリは苦痛であり、ファイルを手動で調整する必要があります(詳細はthe MSDN article on custom webservices within SharePointを参照してください)。しかし、あなたのリクエストを手作りしているので、とにかくディスカバリーは問題ではありません。

[編集]別の方法として、ユーザー、

SPUserToken token = web.AllUsers[WindowsIdentity.GetCurrent().Name].UserToken; 

認証されたウィンドウのSPUserTokenを取得しようとすると、このユーザーとしてサイトとWebを開くには、このトークンを使用することができます。

関連する問題