是否可以使用当前的Windows用户凭据调用c#WebService?

时间:2013-08-13 18:50:36

标签: c# web-services sharepoint authentication asmx

我有一个小的C#ASP.Net WebService。我喜欢从Windows客户端调用此WebService并在SharePoint文档库上执行某些操作。 (例如上传文件)

但是如果我上传文件,它将使用来自webservice的凭据而不是来自调用WebService的用户的凭据来执行。结果=所有文件将显示为“创建者”=系统帐户...

是否可以使用当前的Windows用户凭据调用此WebService(来自浏览器或脚本$ .Ajax)并在WebService中使用这些凭据?

我知道我可以通过这种方式显示调用WebService的用户:

return Username = User.Identity.Name;

但你不能用它来处理这些类型的凭证吗?

我已经尝试了几件事,但我无法获得当前的用户。

代码示例1:(SharePoint客户端对象模型)

ClientContext context = new ClientContext("http://domain.local");
context.Credentials = System.Net.CredentialCache.DefaultCredentials;

代码示例2:(SharePoint Server对象模型)

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:(我不喜欢那个) 我发现了一种可能的方法,但是我必须在代码中输入密码,我不喜欢这样:

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){
   }
});

1 个答案:

答案 0 :(得分:0)

我不了解您的要求和您的环境,但是您是否无法使用CSOM直接从Windows客户端上传文件?

以下是有关如何设置约束委派的链接:http://msdn.microsoft.com/en-us/library/ff650591.aspx#_Step_7:_Impersonate