PnP Core в настоящее время использует более старую версию 2.29.0
пакета Microsoft.IdentityModel.Clients.ActiveDirectory
.
Лучше всего, чтобы вы понизили версию, используемую в вашем проекте API, до версии, используемой PnP Framework, которая наверняка будет работать.
В связи с ошибкой среда вызывает внутренний метод AuthenticationContext.AcquireToken
, который устарел в более новом пакете Nuget v3.
Итак, похоже, что PnP-код вызывает этот метод, относится к версии v2, в то время как правильный метод пакета v3 для использования - AcquireTokenAsync
версии v3, что приводит к конфликту.
Ссылка - Базовый пакет OfficeDevPnP.config Файл
Теперь мы видим, что уже существует PR для обновления пакета nuget в самой платформе PnP, которая, когда она будет принята, сразу же решит вашу проблему. Но может потребоваться некоторое, чтобы быть принятым, поэтому не задерживайте дыхание :)
AuthenticationResult.AcquireToken устарел в ADAL 3.x и как это исправить.
Документы Microsoft - AuthenticationContext.AcquireTokenAsync Method
Так что лучше всего либо понизить ваш проект API до версии v2, либо подождать, пока PnP Framework обновит пакет и его необходимые зависимости.
Другой вариант, если вы используете только PnP для аутентификации, тогда вы можете использовать приведенный ниже вспомогательный метод, который не потребует от вас изменения пакета. Но если вы используете другие функции, такие как инициализация или другие расширения, вам, к сожалению, придется понизить их. Это изменение от того, что используется внутри самого PnP для использования изменений пакета v3:
public ClientContext GetAzureADAppOnlyAuthenticatedContext(string siteUrl, string clientId, string tenant, X509Certificate2 certificate)
{
var clientContext = new ClientContext(siteUrl);
string authority = string.Format(CultureInfo.InvariantCulture, "https://login.windows.net/{0}/", tenant);
var authContext = new AuthenticationContext(authority);
var clientAssertionCertificate = new ClientAssertionCertificate(clientId, certificate);
var host = new Uri(siteUrl);
clientContext.ExecutingWebRequest += (sender, args) =>
{
var ar = authContext.AcquireTokenAsync(host.Scheme + "://" + host.Host + "/", clientAssertionCertificate).GetAwaiter().GetResult();
args.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer " + ar.AccessToken;
};
return clientContext;
}