Не удалось загрузить файл или сборку «Microsoft.IdentityModel.Clients.ActiveDirectory при вызове GetAzureADAppOnlyAuthenticatedContext - PullRequest
0 голосов
/ 17 марта 2020

Я использую сертификат, чтобы получить ClientContext в приложении функции (V1), вот код:

ClientContext newClientContext;
            try
            {
                newClientContext = new AuthenticationManager().GetAzureADAppOnlyAuthenticatedContext(SiteUrl, appId, tenant, certificate);
                newClientContext.ExecuteQuery();
                return newClientContext;
            }
            catch (Exception ex)
            {
                newClientContext = null;
                if (_logHelper != null)
                {
                    _logHelper.writeLog("GetAzureADContextError:"+ex.Message, TraceLevel.Error, ex);
                }
                return null;
            }

, и мой пакет: package version list

Он хорошо работает в локальной среде Visual Studio, но получает информацию о сбоях после развертывания в службах приложений

Could not load file or assembly 'Microsoft.IdentityModel.Clients.ActiveDirectory, Version=2.29.0.1078, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

1 Ответ

1 голос
/ 18 марта 2020

Что касается ошибки, SDK SharePointPnPCoreOnline запрашивает Microsoft.IdentityModel.Clients.ActiveDirectory 2.29.0.1078, но для SDK Microsoft.Azure.Services.AppAuthentication требуется Microsoft.IdentityModel.Clients.ActiveDirectory версия выше, чем 3.14.2. В зависимости от ситуации, я предлагаю вам использовать ссылку на хранилище ключей в вашей функции Azure. После этого мы можем удалить sdk Microsoft.Azure.Services.AppAuthentication и понизить sdk Microsoft.IdentityModel.Clients.ActiveDirectory до версии 2.29.

Подробные шаги приведены ниже.

  1. Настройка MSI для Azure Функция

  2. Создайте политику доступа в Key Vault для идентификатора приложения Azure Function

  3. Получите URL сертификата

enter image description here enter image description here

Сохраните URL в функции Azure Настройки приложения . Его формат должен быть как @Microsoft.KeyVault(SecretUri=<your url>)

enter image description here

Удалить SDK Microsoft.Azure.Services.AppAuthentication и понизить SDK Microsoft.IdentityModel.Clients.ActiveDirectory Обновить код
 var s = Environment.GetEnvironmentVariable("cert");



            var cert = new X509Certificate2(Convert.FromBase64String(s),
                     (string)null,
                     X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
            try
            {
                using (var cc = new OfficeDevPnP.Core.AuthenticationManager().GetAzureADAppOnlyAuthenticatedContext(
                        SiteUrl, appId, tenant,
                        cert))
                {
                    cc.Load(cc.Web, p => p.Title);
                    cc.ExecuteQuery();
                    log.Info("Via PnP, we have site: " + cc.Web.Title);
                };
            }
            catch (Exception ex) {



                log.Info(ex.Message);
            }

enter image description here

...