Sharepoint 2013基于表单的身份验证应用程序禁止错误403

时间:2014-06-23 08:15:15

标签: c# authentication sharepoint forms-authentication

我正在为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身份验证,它就像魅力一样。

我做错了什么?有什么想法吗?

感谢您的帮助

2 个答案:

答案 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");
}