Есть ли способ получить токен от имени пользователя, используя встроенную аутентификацию? (так как он уже перенаправляет пользователя на вход, если он еще этого не делает).
Да, после аутентификации пользователя вы должны приобрести токен доступа для доступа к API SharePoint Online / Microsoft Graph API.
Вы можете использовать промежуточное программное обеспечение OpenID Connect и библиотеку аутентификации Active Directory (ADAL.NET) для получения токена-носителя JWT для вошедшего в систему пользователя с использованием протокола OAuth 2.0:
// Because we signed-in already in the WebApp, the userObjectId is know
string userObjectID = (User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier"))?.Value;
// Using ADAL.Net, get a bearer token to access the TodoListService
AuthenticationContext authContext = new AuthenticationContext(AzureAdOptions.Settings.Authority, new NaiveSessionCache(userObjectID, HttpContext.Session));
ClientCredential credential = new ClientCredential(AzureAdOptions.Settings.ClientId, AzureAdOptions.Settings.ClientSecret);
result = await authContext.AcquireTokenSilentAsync(AzureAdOptions.Settings.TodoListResourceId, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
Вы можете обратиться к примеру кода: Вызов веб-API в веб-приложении ASP.NET Core с использованием Azure AD . Замените ресурс на SharePoint Online API / Microsoft Graph API, чтобы удовлетворить ваши требования.
Я пробовал что-то подобное, но я предполагаю, что этот токен предназначен для приложения, а не от имени пользователя (и выдает 401, если я пытаюсь получить доступ к SharePoint).
Да, ваши коды используют Поток предоставления учетных данных клиента , которые используют собственные учетные данные приложения вместо того, чтобы выдавать себя за пользователя, для аутентификации при вызове другого веб-сервиса.