Доступ запрещен, Office 365 / SharePoint онлайн с учетной записью глобального администратора
Я схожу с ума, так как два дня решаю проблему. Проблема в;
Я делаю консольное приложение, которое общается с SharePoint Online, используя глобальную учетную запись администратора (ту, которая была указана как администратор при создании новой подписки). То, чего я пытаюсь добиться, это то, что я хочу добавить настраиваемое действие с использованием CSOM к каждому семейству сайтов и дочернему сайту Office 365. Этот код прекрасно работает, за исключением корневого семейства сайтов, которое было предварительно создано Office 365 при регистрации (т.е.https://xyz.sharepoint.com)
Для любого арендатора для корневого семейства сайтов, это дает мне ошибку ниже;
{"SchemaVersion": "15.0.0.0", "LibraryVersion": "16.0.3912.1201", "ErrorInfo": {"ErrorMessage": "Доступ запрещен. У вас нет разрешения на выполнение этого действия или доступ к этому ресурсу.", «ErrorValue»: null, «TraceCorrelationId»: «2a47fd9c-c07b-1000-cfb7-cdffbe3ab83a», «ErrorCode»: - 2147024891, «ErrorTypeName»: «System.UnauthorizedAccessException»}, «TraceCorbareI»: 2 -4747 -cfb7-cdffbe3ab83a "}
Теперь пользователь является глобальным администратором. Я также снова добавил этого пользователя в качестве администратора семейства сайтов.
Тот же фрагмент кода отлично работает с другими семействами сайтов (семейство сайтов поиска, любое новое семейство сайтов ...).
вот код;
using (ClientContext spcollContext = new ClientContext(web.Url))
{
SecureString passWord = new SecureString();
foreach (char c in strAdminPassword.ToCharArray()) passWord.AppendChar(c);
SharePointOnlineCredentials creds = new SharePointOnlineCredentials(strAdminUser, passWord);
spcollContext.Credentials = creds;
Web currentweb = spcollContext.Web;
spcollContext.Load(currentweb);
spcollContext.ExecuteQuery();
// authCookie = creds.GetAuthenticationCookie(new Uri(web.Url));
var existingActions2 = currentweb.UserCustomActions;
spcollContext.Load(existingActions2);
spcollContext.ExecuteQuery();
var actions2 = existingActions2.ToArray();
foreach (var action in actions2)
{
if (action.Description == "CustomScriptCodeForEachsite" &&
action.Location == "ScriptLink")
{
action.DeleteObject();
spcollContext.ExecuteQuery();
}
}
var newAction2 = existingActions2.Add();
newAction2.Description = "CustomScriptCodeForEachsite";
newAction2.Location = "ScriptLink";
newAction2.ScriptBlock = scriptBlock;
newAction2.Update();
spcollContext.Load(currentweb, s => s.UserCustomActions);
spcollContext.ExecuteQuery(); // GETTING ERROR ON THIS LINE.
}
Примечание: вышеуказанная ошибка - это следы Fiddler.