none
שרות שעבר מ 2010 ל 2013 הופיעה בעיית אוטנטיקציה Exception: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) at Microsoft.SharePoint.SPGlobal.HandleUnauthorizedAccessException(UnauthorizedAccessException ex) RRS feed

  • שאלה

  • בהרצת הקוד למטה ב WINFORM, כאשר המריץ הוא חשבון מערכת, מתקבלת שגיאה בביצוע Impersonation.

    הבעיה הופיעה רק אחרי מעבר מ SP2010 ל SP2013 (כמובן הגרסה השתנתה ל .NET 4.5)

    הקוד:

    SPUserToken _userToken = null;

    SPSecurity.RunWithElevatedPrivileges(delegate()

    {

      using(SPSitesite = newSPSite(_tbxURL.Text))//הבעיה מתחילה כאן, כי מקבלים BLANCK SITE

      {

        using (SPWeb web = site.OpenWeb())

    {

        _userToken = web.GetUserToken("Domain\\test1");//המשתמש לא system account

    }

         site.Dispose();

        }

     });

                

    using (SPSite site = new SPSite(_tbxURL.Text, _userToken))

     {

        using (SPWeb _web = site.OpenWeb())

          {//הבעיה, אם זה משתמש רגיל ולא

    //system account

    //מחזיר שגיאה

    //Access is denied. (Exception from HRESULT:

    //0x80070005 (E_ACCESSDENIED)) at //Microsoft.SharePoint.SPGlobal.HandleUnauthorizedAccessException

    //(UnauthorizedAccessException ex)

    _tbxResponse.Text = _web.Title;

      }

    }

    אשמח לכל עזרה,

    תודה מראש

    • נערך על-ידי Bitan Eyal יום שני 13 ינואר 2014 13:01 מקצר את השאלה
    יום שני 13 ינואר 2014 10:00

תשובות

  • הבעיה נפתרה, החלפתי שורת קוד

    במקום  web.GetUserToken("Domain\\test"1");

    החלפתי ל web.EnsureUser("Domain\\test").UserToken;

    המסקנה השורה הראשונה עובדת רק ב 2010

    והשורה השניה ב 2013, כלומר באם מעוניינים לקבל SPUserToken חייבים לעשות EnsureUser

    תודה לאור שניסה לעזור

    • סומן כתשובה על-ידי Bitan Eyal יום שני 03 פברואר 2014 18:33
    יום שני 03 פברואר 2014 18:32

כל התגובות

  • היי, אתה נופל ב debug על כך שהוא לא מצליח למצוא את האתר שהוכנס לאובייקט SPSITE?

    אני אנסה להריץ את הקוד אצלי ונראה מה קורה, בעקרון הוא נראה בסדר.


    My Blog: ShareThePoint

    • סומן כתשובה על-ידי Eran Sharvit יום רביעי 22 ינואר 2014 11:24
    • סימון כתשובה בוטל על-ידי Bitan Eyal יום רביעי 22 ינואר 2014 12:22
    • סומן כתשובה על-ידי Eran Sharvit יום ראשון 26 ינואר 2014 10:54
    • סימון כתשובה בוטל על-ידי Or BiranModerator יום שני 03 פברואר 2014 17:28
    יום שני 13 ינואר 2014 20:31
    מנחה דיון
  • לא נופל על זה שלא מוצא SPSITE.

    כשמגיע ל _web.title נופל, מאחר וה SITE  וגם ה WEB ריקים.

    השגיאה מופיעה מעל ה _web.title.

    יכול להיות בעיה בגישה\הרשאות ל wss_content_site1?

    מדובר בסביבת sp2013 .NET 4.5

    תודה לך

    יום שלישי 14 ינואר 2014 07:59
  • שלום אור,

    יש חדש?

    הרצת אצלך את הקוד?

    יום שני 03 פברואר 2014 10:04
  • תקופה עמוסה במיוחד למען האמת אני באמת חייב לנסות לראות מה הסיפור עם הקטע קוד הזה ב 2013, אני אעשה מאמץ להריץ אותו אצלי בשעה הקרובה.

    My Blog: ShareThePoint

    יום שני 03 פברואר 2014 13:33
    מנחה דיון
  • אתה יכול לבנתיים לחסוך לי זמן ופשוט להביא לי את הפרויקט על מנת שאבדוק אותו, שיכלול רק את הקוד הרלוונטי.


    My Blog: ShareThePoint

    יום שני 03 פברואר 2014 14:41
    מנחה דיון
  • אוקי אני הרצתי את הקוד והצלחתי לשחזר את הבעיה שלך, אני עובד על זה.

    My Blog: ShareThePoint

    יום שני 03 פברואר 2014 15:06
    מנחה דיון
  • כפי שאני רואה את זה מדובר על בעיית Kerberos, אני אפתור את העניין הזה מחר בבוקר בתקווה שיהיה לי את הזמן המתאים.

    אל דאגה!


    My Blog: ShareThePoint

    יום שני 03 פברואר 2014 15:35
    מנחה דיון
  • אוקי אז מדובר בהגדרות Authentication של ה Web Application, האם אתה מריץ את הקוד משרת אחר שהוא לא השרת SP?

    ייתכן ואתה בכלל נופל על Double-Hop.


    My Blog: ShareThePoint

    יום שני 03 פברואר 2014 15:40
    מנחה דיון
  • תודה, גם מאותה מכונה וגם ממכונה אחרת.

    בעקרון בניתי את הקוד הזה בכדי להתמקד ולהקל על ההבנה.

    אבל בעקרון מדובר בשירות נפרב מה SP

    שמקבל קריאות מה CRM, כאשר המשתמש עובר דרך windos Authentication

    שולפים את שם היוזר ופונים ל SP לקבל את ה USER TOKEN של היוזר

    ואחורי זה עושים IMERSONATE עם הקטע קוד המצורף.

    כל זה ב SP2010 עבד מצויין

    קצת על הסביבה, ישנם FrontEnds וישנו BackEnd

    כעת, ניסיתי את הקוד משני הסביבות והייתה אותה שגיאה

    והבעיה היא בשורה using (SPSite site = newSPSite(_tbxURL.Text, _userToken))

    יום שני 03 פברואר 2014 17:27
  • אני לא חושב שיש בעיה בקוד למען האמת, זו בעיה ב Kerberos.. אני אבצע בדיקות מחר בבוקר ואני אגיד לך בדיוק מה צריך להיות.

    בכל מקרה, תנסה להפעיל את הקוד על כל ה Web Applications שיש לך על החווה כלל ה Central Admin ותראה אם על אחד מהם זה כן עובד (סביר להניח שעל ה CA זה יעבוד כי לי זה עבד).


    My Blog: ShareThePoint

    יום שני 03 פברואר 2014 17:31
    מנחה דיון
  • הבעיה נפתרה, החלפתי שורת קוד

    במקום  web.GetUserToken("Domain\\test"1");

    החלפתי ל web.EnsureUser("Domain\\test").UserToken;

    המסקנה השורה הראשונה עובדת רק ב 2010

    והשורה השניה ב 2013, כלומר באם מעוניינים לקבל SPUserToken חייבים לעשות EnsureUser

    תודה לאור שניסה לעזור

    • סומן כתשובה על-ידי Bitan Eyal יום שני 03 פברואר 2014 18:33
    יום שני 03 פברואר 2014 18:32
  • יפה מאוד, אני ניסיתי לשנות את השורה הזו בשימוש עם AllUsers, מעניין שמול ה CA זה עבד.. אני בטוח שזה עניין של הגדרות אבל מצאת איזה אזכור ברשת בנוגע לשורת קוד המקורית שיש איתה בעיה מול 2013? 

    My Blog: ShareThePoint

    יום שני 03 פברואר 2014 18:36
    מנחה דיון
  • לא במפורש, ראיתי קוד דומה שמשתמשים שם ב ensure ומאחר שהבעיה אצלי הייתה, שכן מקבל Token, רק בכניסה לאתר הToken לא מוכר, צילצל לי שהפקודה  Ensure היא זו שתעביר "אישור\Token" ל"מתווך", אמרתי בוא ננסה שורה זו וזה עבד.

    אני לא יודע אם המסקנה שהקסתי היא נכונה, אבל זה מה שקרה אצלי וזו המסקנה שלי בלבד.

    אם למישהו יש לו מסקנה אחרת, אשמח לשמוע


    • נערך על-ידי Bitan Eyal יום שלישי 04 פברואר 2014 09:38
    יום שלישי 04 פברואר 2014 09:37