首页 文章

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

提问于
浏览
1

此配置适用于经典模式下的SP2010或SP2007 .

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

我得到了 UnauthorizedAccessException . 异常消息是

访问被拒绝 . (来自HRESULT的异常:0x80070005(E_ACCESSDENIED)) .

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

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

using (SPSite siteCollection = new SPSite(url))

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

/// continues...

1 回答

  • 0

    嗯...迟到总比没有好 . 我今天遇到了同样的问题 . 当您在_Layouts文件夹中发布.ASPX页面时会出现问题,然后,在使用Forms或Claims auth时,使该自定义页面成为会话中的第一个页面(之前没有记住登录) . 默认情况下不会触发SharePoint身份验证(即使您从LayoutsPageBase类继承) . 如果您导航到其他某个SharePoint页面(例如_Layouts / 15 / Settings.aspx)然后返回,则填写CurrentUser . 我必须使用Reflector来更好地了解发生了什么,以及如何修理它 . 简短的回答是,一旦你意识到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;
    }
    

相关问题