Не уверен, почему вы используете MSAL напрямую для доступа к SharePoint Online API.Самый простой способ - использовать Microsoft.SharePointOnline.CSOM
var clientContext = new ClientContext(siteUrl);
clientContext.Credentials = new SharePointOnlineCredentials(userName, securedPassword);
, и вы закончили работу с CSOM API.
Но я думаю, что это должно быть возможно с MSALтакже.Имейте в виду, что полученный вами токен предоставляется для какого-либо ресурса.Скопируйте синтаксический анализ вашего токена в http://jwt.ms/ и посмотрите на aud
значение
, если это поле содержит https://graph.microsoft.com
, оно простоне может быть действительным для вас https://yourtenant.sharepoint.com
, а вам нужен другой!
Вы должны быть в состоянии запросить правильный токен, используя Microsoft.Identity.Client
var authority = $"https://login.microsoftonline.com/{tenantId}";
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri(authority))
.Build();
var scopes = new[] { "https://yourtenant.sharepoint.com/.default" };
var authenticationResult = await app.AcquireTokenForClient(scopes)
.ExecuteAsync();
Какрезультат authenticationResult.AccessToken
должен содержать токен доступа, действительный для SharePoint Online REST API.(https://yourtenant.sharepoint.com/.default
означает, что вы запрашиваете все области, настроенные для приложения Azure AD) *
Когда вы декодируете новый струйный токен, он должен выглядеть следующим образом