Microsoft Graph и access без пользователя

#c# #azure #azure-active-directory #microsoft-graph-api #microsoft-graph-sdks

#c# #azure #azure-active-directory #microsoft-graph-api #microsoft-graph-sdks

Вопрос:

Я пытаюсь загружать и загружать файлы в свой sharepoint online, используя фоновую задачу (демон), которая часто запускается в моем ASP.NET Основное приложение. Поскольку это фоновая задача, идентификатор пользователя не используется. Вместо этого я попытался следовать этому документу, получая токен доступа с использованием области https://graph.microsoft.com/.default видимости, а также имея свое корпоративное приложение в azure с определенными разрешениями, уже предоставленными администратором. согласие администратора

Я могу получить токен доступа, используя идентификатор клиента и секрет моего приложения. Однако, когда я пытаюсь запросить диски на определенном сайте в sharepoint, он просто останавливается, намекая мне, что он не может достичь пути. Я могу полностью достичь этого же пути, когда вместо этого использую свои учетные данные пользователя.

Я думаю, что, возможно, я пропустил шаг или какую-то задачу, связанную с администрированием Azure. Ниже приведен фрагмент кода, который показывает, что я могу получить токен доступа, но зависает при получении дисков.

 var client = new ConfidentialClientApplication(id, uri, cred, null, new SessionTokenCache());
var authResult = await client.AcquireTokenForClientAsync(new[] {"https://graph.microsoft.com/.default"});
var token = authResult.AccessToken;  // get token successfully
var graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(async request => {request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token)}));
// stalls below
var drives = await graphServiceClient.Sites[<sharepoint_host>].SiteWithPath(<known_path>).Drives.Request().GetAsync(); 
 

Использование Microsoft Graph SDK в ASP.NET Приложение Core 2.

Редактировать: ниже приведен обновленный скриншот, показывающий добавленные и согласованные разрешения приложений: обновленный снимок экрана

Комментарии:

1. Что это за сообщение об ошибке?

2. Я добавил новый снимок экрана, показывающий разрешения приложения, но все еще есть проблемы. Сообщение об ошибке: в токене должны присутствовать либо scp, либо утверждение ролей.

Ответ №1:

На основе вашего изображения вы предоставили делегированные разрешения приложению. Вам необходимо предоставить разрешения для приложений. Делегированные разрешения применяются только при действиях от имени пользователя.

Комментарии:

1. Хотя вышесказанное верно, что мне нужно было предоставить разрешения для приложений, по какой-то причине это все равно не сработало для меня. Я смотрю на декодированный токен, который я получаю, и он не содержит в нем никаких ролей. Не уверен, что здесь делать.

2. Хорошо, вам потребовались разрешения, а затем нажмите кнопку Предоставить разрешения?

3. Да, затем он открывает браузер, пытающийся загрузить мое приложение localhost, но я получаю сообщение об ошибке: при обработке удаленного входа в систему возникла ошибка. —> Система. Исключение: ошибка корреляции.

4. Я имею в виду кнопку предоставления разрешений / предоставления согласия администратора на портале Azure.

5. Да, есть кнопка, и при нажатии на нее открывается окно браузера, направленное на мой локальный хост (который выдает ошибку).