首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Sharepoint声明的身份验证与传统身份验证

基于Sharepoint声明的身份验证与传统身份验证
EN

Stack Overflow用户
提问于 2013-08-27 22:31:44
回答 1查看 736关注 0票数 0

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

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

ManifoldCF提供了一个名为MCPermissions.asmx的web服务包,可供访问。此文件包含以下代码块,用于设置用户凭据:

代码语言:javascript
复制
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 (“用户名”、“密码”、“域”)设置预定义的凭据,但没有成功。

示例:

代码语言:javascript
复制
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问题,而传统身份验证不会吗?

EN

回答 1

Stack Overflow用户

发布于 2014-05-07 07:56:57

事实证明,这是ManifoldCF 1.2版本的一个错误。在较新版本中已修复此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18468326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档