首页 > 解决方案 > SharePoint 不断在弹出窗口中询问凭据

问题描述

我们创建了一个具有 Rest API 的 SharePoint 列表自定义表单,当具有 Contribute 访问权限的用户尝试提交表单时,他们会一次又一次地弹出请求凭据。尽管该功能适用​​于完全访问权限和网站集管理员用户。

一段时间后,页面也变得无响应。请协助

标签: restsharepointsharepoint-2013sharepoint-onlinesharepoint-designer

解决方案


如果您有客户端 JavaScript 执行 REST 调用,它将始终在当前用户的上下文中运行,这意味着您不能在 REST 调用中执行当前用户无权执行的任何操作。

如果您使用的是使用集成 NTLM 安全性的 SharePoint Server 的本地安装(这意味着您的 Active Directory 用户通常会自动登录到 SharePoint 而无需输入他们的凭据),那么当您的代码尝试客户端 REST 调用时执行当前用户未授权的操作,浏览器将自动提示他们输入具有访问权限的用户帐户的 AD 凭据。

如果您使用的是在线环境或没有集成安全性的环境,那么您的代码不会重新提示用户输入凭据,而是只会收到 401 Unauthorized。

如果您的 SharePoint 场正在使用与本地域的集成安全性,则当您尝试访问他们无权访问的资源时,无法直接阻止用户提示输入凭据。相反,您需要使用 REST API 来查看当前用户是否有权执行该操作,如果没有,则显示更友好的错误。

下面是一个例子,借鉴了之前关于检查用户权限的堆栈交换帖子:

function checkPermissions() {
    var call = jQuery.ajax({
        url: _spPageContextInfo.webAbsoluteUrl +
            "/_api/Web/effectiveBasePermissions",
        type: "GET",
        dataType: "json",
        headers: {
            Accept: "application/json;odata=verbose"
        }
    });

    call.done(function (data, textStatus, jqXHR) {
        var manageListsPerms = new SP.BasePermissions();
        manageListsPerms.initPropertiesFromJson(data.d.EffectiveBasePermissions);

        var manageLists = manageListsPerms.has(SP.PermissionKind.manageLists);

        var message = jQuery("#message");
        message.text("Manage Lists: " + manageLists);
    });
}

推荐阅读