Невозможно получить ProjectContext для Project Online из SharePoint Office 365 и получить ошибку 403 в .NET 8.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно получить ProjectContext для Project Online из SharePoint Office 365 и получить ошибку 403 в .NET 8.

Сообщение Anonymous »

У меня есть опыт работы с .NET, но я новичок в Sharepoint и Project Online. Мне любопытно, МИД это или что там происходит, но я всегда получаю

Код: Выделить всё

The remote server returned an error: (403) FORBIDDEN
Для кода

Код: Выделить всё

public async Task
 GetContextWithCredentialsAsync(string url, string username, string password)
{
try
{
if (url.ToUpper().StartsWith("HTTP://") || url.ToUpper().StartsWith("HTTPS://"))
{
var securePassword = new SecureString();
password.ToCharArray().ToList().ForEach(s => securePassword.AppendChar(s));

var clientContext = new ProjectContext(url)
{

Credentials = new NetworkCredential(username, securePassword)
};
clientContext.Load(clientContext.Projects);
clientContext.ExecuteQuery();

return await System.Threading.Tasks.Task.Factory.StartNew(() => { return clientContext; });
}
}
catch (Exception ex)
{
throw ex;
}

return null;
}
Я видел в Интернете другой похожий код, делающий это, и думаю, возможно, это MFA, и мне нужно получить аутентификацию, но другие ссылки, которые я видел, были старше .NET. Я использую библиотеку: Microsoft.SharePointOnline.CSOM версии 16.1.24810.12000 в веб-API .NET 8, вызывая приведенный выше код.
Изменить:
Кажется, у вас есть использовать Entra и что-то еще, но я хочу, чтобы все могли использовать лучший ответ. Очень грустно, когда документы MS ошибаются. Кто-то должен знать ответ, который мы можем написать для .NET 8, а НЕ для полной платформы.
Наиболее близкий вариант, который у меня есть, требует clientId и tenantId, но это было сделано через Azure. Можете ли вы сделать это для виртуальной машины напрямую, без приложения Azure?

Код: Выделить всё

public async System.Threading.Tasks.Task
CreateConnectionProjectContext(string baseUrl, string url, string username, string password, string clientId, string tenantId)
{
var pcaConfig = PublicClientApplicationBuilder.Create(clientId).WithTenantId(tenantId);

var TokenResult = await pcaConfig.Build().AcquireTokenByUsernamePassword(new[] { baseUrl }, username, password).ExecuteAsync();

// Load ps context
var projectContext = new ProjectContext(url);
projectContext.ExecutingWebRequest += (s, e) =>
{
e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer " + TokenResult.AccessToken;
};

projectContext.Load(projectContext.Projects);
projectContext.ExecuteQuery();

_context = projectContext;
}
}
Проблема в строке «var pcaConfig». Можете ли вы сделать это непосредственно в Entra без приложения Azure?

Подробнее здесь: https://stackoverflow.com/questions/784 ... 65-and-get
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»