我正在为SharePoint 2013开发一个Provider托管的应用程序。
我在开发集合上调试此应用程序,同时激活了Windows身份验证和FBA(基于表单的身份验证)。我可以使用我的Windows帐户或存储在SQL Server中的用户成功访问此集合。这两个帐户都是集合的管理员,可以完全控制它。
当我运行应用程序时,我得到了通常的窗口,询问我想要的身份验证模式。在成功连接用户(两者都正常工作)后,我得到:“远程服务器在clientContext.ExecuteQuery()上返回错误:(403)Forbidden”。
var contextToken = TokenHelper.GetContextTokenFromRequest(Page.Request);
var hostWeb = Page.Request["SPHostUrl"];
using (var clientContext = new ClientContext(hostWeb))
{
clientContext.Load(clientContext.Web, web => web.Title);
clientContext.ExecuteQuery();
Response.Write(clientContext.Web.Title);
}
我应该确切地说,如果我在集合上禁用FBA并且只允许Windows身份验证,它就像魅力一样。
我做错了什么?有什么想法吗?
感谢您的帮助
答案 0 :(得分:0)
public void Whatevermethod()
{
using (SP.ClientContext clientContext = new SP.ClientContext("http://server/collection"))
{
//Configure the handler to set FBA mode
clientContext.ExecutingWebRequest += new EventHandler<SP.WebRequestEventArgs>(ctx_MixedAuthRequest);
//Use the default mode to execute under the credentials of this process
clientContext.AuthenticationMode = SP.ClientAuthenticationMode.Default;
clientContext.Credentials = System.Net.CredentialCache.DefaultCredentials;
clientContext.ExecuteQuery();
}
}
private void ctx_MixedAuthRequest(object sender, SP.WebRequestEventArgs e)
{
try
{
//Add the header that tells SharePoint to use FBA
e.WebRequestExecutor.RequestHeaders.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
}
catch (Exception ex)
{
string error = ex.Message;
}
}
答案 1 :(得分:-1)
var hostWeb = Page.Request["SPHostUrl"];
using (var clientContext = new ClientContext(hostWeb))
{
clientContext.ExecutingWebRequest += new EventHandler<WebRequestEventArgs>(clientContext_ExecutingWebRequest);
clientContext.Load(clientContext.Web, web => web.Title);
clientContext.ExecuteQuery();
Response.Write(clientContext.Web.Title);
}
static void clientContext_ExecutingWebRequest(object sender, WebRequestEventArgs e)
{
e.WebRequestExecutor.WebRequest.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
}