SharePoint 2010:此页面的安全验证无效

时间:2014-01-13 13:07:34

标签: sharepoint-2010

这是我检索项目的Javascript代码是SharePoint 2010(SP)列表。

var clientContextPath = "/path/site1";
var clientContext = new SP.ClientContext(clientContextPath);
var oList = clientContext.get_web().get_lists().getByTitle(list); 
var camlQuery = new SP.CamlQuery(); 
...

但是,如果我想从其他网站检索,即

var clientContextPath = "/path/site2";

然后相同的代码生成异常“此页面的安全验证无效”。这是在同一个域内,所以它与XSS无关。

有趣的是,当我使用其他网站时,相同的代码工作正常

var clientContextPath = "/path/site3";

请帮忙。谢谢。

3 个答案:

答案 0 :(得分:1)

确保您运行javascript的页面具有此控件:

<SharePoint:FormDigest runat="server" />

FormDigest根据用户,网站和时间在您的网页中添加安全令牌。页面回发后,安全令牌将得到验证。一旦生成安全令牌,它就会在可配置的时间内有效。

http://ranaictiu-technicalblog.blogspot.com.au/2010/02/sharepoint-2010-client-object-model-for.html

更新:如果以上操作不起作用,请在执行查询之前尝试此操作:

function CustomUpdateFormDigest()
{
    if(window._spPageContextInfo != null)
    {
        var $v_2 = window._spPageContextInfo;
        var $v_3 = $v_2.webServerRelativeUrl;
        var $v_4 = window._spFormDigestRefreshInterval;
        UpdateFormDigest($v_3, $v_4);
    }
}
CustomUpdateFormDigest();

当我唯一的选择是关闭页面验证时,这对我有用。

更新2:

好像你可能遇到了一个分享点错误。也许尝试通过累积更新,或作为最后的手段关闭页面验证,只需确保您了解此选项的安全隐患

答案 1 :(得分:1)

我刚试过这个解决方案,我确信它不会起作用,但是......确实如此!基本上,这是从SharePoint收集新令牌的Ajax请求。

$.ajax({
        url: projecturl + "/_api/contextinfo",
        method: "POST",
        headers: { "Accept": "application/json; odata=verbose"},
        success: function (data) {
            $('#__REQUESTDIGEST').val(data.d.GetContextWebInformation.FormDigestValue);

            EnsureScriptFunc('sharing.js', 'DisplaySharingDialog', function () { DisplaySharingDialog(projecturl) });

        },
        error: function (data, errorCode, errorMessage) {
            alert(errorMessage)
        }
    });

答案 2 :(得分:0)

更简单的方法

UpdateFormDigest(_spPageContextInfo.webServerRelativeUrl, _spFormDigestRefreshInterval)

这是本机方法,是共享点。只需在调用ajax请求或executeQueryAsync()之前添加此方法即可。

来源:http://www.wictorwilen.se/sharepoint-2013-how-to-refresh-the-request-digest-value-in-javascript