1

この設定は、クラシックモードまたはSP2007のSP2010で機能します。基本認証クレーム認証付きSP2010にインストールされたWCFサービス

WCFサービスは、Sharepoint Webサイトの下にアプリケーションとしてインストールされています。このアプリケーションは基本認証を使用します。

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... 

答えて

0

まあ...決して遅くない。私は今日この同じ問題に遭遇しました。問題は、_Layoutsフォルダに.ASPXページを公開し、FormsまたはClaims authを使用しているときにセッションで最初にヒットしたカスタムページを作成するときに発生します。 SharePoint認証は、(LayoutsPageBaseクラスを継承していても)デフォルトでは起動されません。他のSharePointページ(_Layouts/15/Settings.aspxなど)に移動して戻った場合、CurrentUser となります。リフレクタを使用して、何が起こっていたのかを把握する必要がありました。それを修正する方法。私の場合は

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

、このコードは、私が使用しているブラウザへのチャレンジ/レスポンスを生成します。あなたはCurrentUserに== nullは、あなたがこのコード行を追加する必要があることを認識した後の短い答えは、ですログインすると、このコード行の直後に、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; 
}