1

Cette configuration fonctionne avec SP2010 en mode classique ou SP2007.Service d'authentification de base WCF installé dans SP2010 avec authentification des revendications

Nous avons un service WCF qui est installé en tant qu'application sous le site Web Sharepoint. Cette application utilise l'authentification de base.

Je reçois une exception UnauthorizedAccessException. Le message d'exception est 'Accès refusé. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED)) '.

Dans le débogueur, je remarque que sur l'objet SPWeb, la propriété CurrentUser est null.

Que dois-je faire pour permettre à cet utilisateur par l'authentification de base de pouvoir lire les listes de points de partage?

using (SPSite siteCollection = new SPSite(url)) 

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

/// continues... 

Répondre

0

Eh bien ... mieux vaut tard que jamais. J'ai rencontré ce même problème aujourd'hui. Les problèmes surviennent lorsque vous publiez des pages .ASPX dans le dossier _Layouts, puis lorsque vous utilisez l'authentification Forms ou Claims, définissez cette page personnalisée comme votre premier hit dans une session (sans connexion précédemment mémorisée). L'authentification SharePoint n'est pas déclenchée par défaut (même si vous héritez de la classe LayoutsPageBase). Si vous naviguez vers une autre page SharePoint (telle que _Layouts/15/Settings.aspx) et que vous revenez, alors le CurrentUser est rempli. J'ai dû utiliser Reflector pour avoir une meilleure idée de ce qui se passait, et comment le réparer. La réponse courte est, une fois que vous vous rendez compte que le CurrentUser == null, vous devez ajouter cette ligne de code:

Microsoft.SharePoint.Utilities.SPUtility.HandleAccessDenied(new UnauthorizedAccessException()); 

Dans mon cas, ce code génère un défi/réponse au navigateur, que je l'habitude de Connectez-vous, et immédiatement après cette ligne de code, l'objet CurrentUser est rempli correctement. Voici à quoi ressemblait toute ma fonction:

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; 
} 
Questions connexes