【问题标题】:Sharepoint claims based vs classic authentication基于 Sharepoint 声明与经典身份验证
【发布时间】:2013-08-27 14:31:43
【问题描述】:

我有 2 个 sharepoint 站点用完了一个 sharepoint 安装。一个站点启用了基于声明,另一个站点启用了经典身份验证。这两个站点也都使用 Kerberos。

我正在使用 ManifoldCF 连接到这些站点以提取所有内容以及权限。 ManifoldCF 连接器连接到启用了经典身份验证的站点并按预期工作。但是,尝试抓取基于声明的网站会产生 401 未经授权的错误。

有一个随 ManifoldCF 提供的 Web 服务包,可以访问它,称为 MCPermissions.asmx。此文件包含以下设置用户凭据的代码块:

try
{
    // Only handle requests for "item".  Send all other requests to the SharePoint web service.
    if (objectType.Equals(itemType))
    {
        retVal = GetItemPermissions(objectName);
    }
    else
    {
        ServicePointManager.ServerCertificateValidationCallback +=
        new RemoteCertificateValidationCallback(ValidateCertificate);
        using (SPPermissionsService.Permissions service = new SPPermissionsService.Permissions())
        {
            service.Url = SPContext.Current.Web.Url + "/_vti_bin/Permissions.asmx";
            service.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
            retVal = service.GetPermissionCollection(objectName, objectType);
        }
    }
}
catch (SoapException soapEx)
{
    throw soapEx;
}
catch (Exception ex)
{
    SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("MCPermissions.asmx", TraceSeverity.Unexpected, EventSeverity.Error), TraceSeverity.Unexpected, "Error: "+ex.Message+"; SPContext.Current.Web.Url='"+SPContext.Current.Web.Url+"'", ex.StackTrace);
    throw RaiseException(ex.Message, "1000", ex.Source);
}

此代码可以通过 ManifoldCF 正确访问,但似乎是插件中对 /_vti_bin/Permissions.asmx 的请求导致了 401 问题。

我尝试使用 NetworkCredential 在上面的代码中设置预定义的凭据 (“用户名”、“密码”、“域”)但没有运气。

例子:

string webUrl = SPContext.Current.Web.Url;
NetworkCredential myCredentials = new NetworkCredential("DOMAIN\\user", "mypassword", "DOMAIN");
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(webUrl), "Negotiate", myCredentials); 
service.Url = webUrl + "/_vti_bin/Permissions.asmx";
service.Credentials = credCache;

使用基于声明的身份验证,我在 ManfoldCF 或浏览器身份验证中输入的用户名会从常规 \ 格式更改为声明用户名格式(例如 i:0#.w||/)。

有人知道为什么基于声明会导致经典身份验证不会出现的 401 问题吗?

【问题讨论】:

    标签: sharepoint kerberos claims-based-identity


    【解决方案1】:

    原来这是 ManifoldCF 1.2 版本的一个错误。它已在较新的版本中得到修复。

    【讨论】:

      猜你喜欢
      • 2012-12-24
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 2013-01-20
      相关资源
      最近更新 更多