Sharepoint 2010 基本身份验证WCF服务安装在SP2010中,具有声明身份验证

Sharepoint 2010 基本身份验证WCF服务安装在SP2010中,具有声明身份验证,sharepoint-2010,basic-authentication,claims-based-identity,Sharepoint 2010,Basic Authentication,Claims Based Identity,此配置在经典模式或SP2007下与SP2010配合使用 我们有一个WCF服务,它作为应用程序安装在Sharepoint网站下。此应用程序使用基本身份验证 我收到一个未经授权的访问异常。 异常消息是 访问被拒绝。(HRESULT的例外情况:0x80070005 (E_) 在调试器中,我注意到在SPWeb对象上,CurrentUser属性为null 我需要做什么才能允许此用户通过基本身份验证来读取sharepoint列表 using (SPSite siteCollection = new SPS

此配置在经典模式或SP2007下与SP2010配合使用

我们有一个WCF服务,它作为应用程序安装在Sharepoint网站下。此应用程序使用基本身份验证

我收到一个未经授权的访问异常。 异常消息是

访问被拒绝。(HRESULT的例外情况:0x80070005 (E_)

在调试器中,我注意到在SPWeb对象上,CurrentUser属性为null

我需要做什么才能允许此用户通过基本身份验证来读取sharepoint列表

 using (SPSite siteCollection = new SPSite(url))

        {
            using (SPWeb rootWeb = siteCollection.OpenWeb())
            {
                DataTable news = ReadNews(rootWeb, (uint)sizeNumber);

/// continues...

嗯。。。迟到总比不做好我今天遇到了同样的问题。当您在_Layouts文件夹中发布.ASPX页面,然后在使用Forms或Claims auth时,将该自定义页面设置为会话中的第一个点击(之前没有记住登录名)时,就会出现问题。默认情况下不会触发SharePoint身份验证(即使您从LayoutsPageBase类继承)。如果您导航到其他一些SharePoint页面(如_Layouts/15/Settings.aspx),然后返回,则会填写CurrentUser。我不得不使用反射器来更好地了解发生了什么,以及如何修复它。简单的回答是,一旦您意识到CurrentUser==null,您需要添加以下代码行:

Microsoft.SharePoint.Utilities.SPUtility.HandleAccessDenied(new UnauthorizedAccessException());
在我的例子中,这段代码生成了对浏览器的质询/响应,我使用浏览器登录,紧接着这行代码,CurrentUser对象被正确填写。以下是我的整个功能的最终结果:

public static bool isAdminAuthorized()
{
    Microsoft.SharePoint.SPContext oContext ;
    Microsoft.SharePoint.SPWeb oWeb ;
    Microsoft.SharePoint.SPUser oUser ;
    try
    {
        oContext = Microsoft.SharePoint.SPContext.Current;
    }
    catch { throw new Exception("Can't obtain Sharepoint Context!"); }
    try
    {
        oWeb = oContext.Web;
    }
    catch { throw new Exception("Can't obtain Sharepoint web!"); }
    try
    {
        oUser = oWeb.CurrentUser;
    }
    catch { throw new Exception("Can't obtain Sharepoint current user!"); }
    if (oUser == null)
    {
        Microsoft.SharePoint.Utilities.SPUtility.HandleAccessDenied(new UnauthorizedAccessException());
        oUser = oWeb.CurrentUser;
    }
    foreach (Microsoft.SharePoint.SPGroup oGroup in oUser.Groups)
    {
        if (oGroup.Name.ToUpper().Contains("OWNER"))
        {
            return true;
        }
    }
    return false;
}