小さな C# ASP.Net WebService があります。Windows クライアントからこの WebService を呼び出して、SharePoint ドキュメント ライブラリでいくつかのことを行うのが好きです。(例: ファイルのアップロード)
しかし、ファイルをアップロードすると、WebService を呼び出したユーザーからの資格情報ではなく、Web サービスからの資格情報で実行されます。結果 = すべてのファイルが「作成者」として表示されます = システム アカウント...
現在の Windows ユーザー資格情報を使用して (ブラウザーまたはスクリプト $.Ajax から) この WebService を呼び出し、WebService でこれらの資格情報を操作することは可能ですか?
たとえば、次の方法で WebService を呼び出したユーザーを表示できることがわかっています。
return Username = User.Identity.Name;
しかし、それを使用してこれらの種類の資格情報を操作することはできませんか?
すでにいくつかのことを試しましたが、現在のユーザーを取得できませんでした。
コード例 1: (SharePoint クライアント オブジェクト モデル)
ClientContext context = new ClientContext("http://domain.local");
context.Credentials = System.Net.CredentialCache.DefaultCredentials;
コード例 2: (SharePoint サーバー オブジェクト モデル)
SPUserToken userToken = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite("SiteUrl"))
{
using (SPWeb web = site.OpenWeb())
{
userToken = web.AllUsers["DOMAIN\\USERNAME"].UserToken;
}
});
using (SPSite site = new SPSite("SiteUrl", userToken))
{
using (SPWeb web = site.OpenWeb())
{
// Perform actions
}
}
コード例 3: (私はそれが好きではありません) 考えられる方法を 1 つ見つけましたが、好きではないコードでパスワードを単純に入力する必要があります。
NetworkCredential credentials = new NetworkCredential("username", "pwd", "domain");
ClientContext context = new ClientContext("http://site-url");
context.Credentials = credentials;
...
web.config ファイルで最も重要なものもここにあると思いますか?:
<authentication mode="Windows"/>
<add name="Access-Control-Allow-Origin" value="http://domain.local"/>
<add name="Access-Control-Allow-Credentials" value="true"/>
<add name="Access-Control-Allow-Headers" value="Content-Type"/>
現在のユーザーのユーザー コンテキストでコードを実行する方法はありますか?
スクリプト呼び出し:
$.ajaxSetup({
type: "GET",
url: "webServiceUrl",
data: { string: "value" },
dataType: 'json',
xhrFields: {
withCredentials: true
},
crossDomain: true,
success: function(data){
},
error: function(XMLHttpRequest, textStatus, errorThrown){
}
});