休息调用WebException 401仅在混合身份验证webapp中未经授权

时间:2014-01-28 08:44:36

标签: c# rest sharepoint sharepoint-2013 fba

尝试从SharePoint应用程序外部(特别是从.NET控制台应用程序)进行休息调用时,我遇到了一种奇怪的行为。只要我使用DefaultCredentials一切都很好,只要我的webapplication不允许FBA(基于表单的身份验证),我就可以毫无问题地移交NetworkCredentials。

但是一旦FBA身份验证被激活,我就无法进行其余的呼叫,并且会返回401 Unauthorized。

var req = (HttpWebRequest)HttpWebRequest.Create("http://{url}/_api/web/title");
req.Method = "GET";
req.Credentials = new NetworkCredential("{user}", "{pass}");
req.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
var response = (HttpWebResponse)req.GetResponse();

我也试过这种方式交出这样的凭证:

var req = (HttpWebRequest)HttpWebRequest.Create("http://{url}/_api/web/title");
req.Method = "GET";
req.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
var ccache = new CredentialCache();
ccache.Add(new Uri("http://{url}"), "Basic", new NetworkCredential("{user}", "{pass}"));
req.Credentials = ccache;
var response = (HttpWebResponse)req.GetResponse();

有没有人有一个提示或想法可能有什么问题,以及如何在混合身份验证Web应用程序中实现使用凭据访问rest api的目标?

1 个答案:

答案 0 :(得分:0)

应该可行的解决方法是将SharePoint Web应用程序扩展到第二个区域 - 并且该区域上没有打开FBA。所以你有这样的事情: www.mysharepointsite.com< - FBA + Windows身份验证访问 restapi.mysharepointsite.com< - 仅限Windows身份验证

然后只需将您的电话指向restapi.mysharepointsite.com而不是www.mysharepointsite.com。