Пытается вызвать методы API планировщика, но не работает из задания мобильной службы Azure. Работает локально

У меня есть консольное приложение, которое может удалять и создавать задания в коллекции заданий в Планировщике Azure. Я создал локальный сертификат для создания SchedulerClient и развернул этот сертификат через портал Azure -> Настройки -> Сертификаты управления -> Загрузить.

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

Сначала задание завершилось неудачно, поскольку в нем говорится, что он не может найти сертификат: -

Message = 'Попытка создать запланированное задание «Имя задания» не удалась со следующим сообщением: «Не удалось найти сертификат с отпечатком« xxxx ».'. ', Exception = System.ArgumentException: сертификат с отпечатком« xxxx »не удалось быть расположен. в TechCare.Mobile.Services.JobManager.GetStoreCertificate (отпечаток строки) в TechCare.Mobile.Services.JobManager..ctor () в lambda_method (Closure, Object []) в Autofac.Core.Activators.Reflection.ConstructorParameterBinding () , Id = 6a06732a-1dba-4ce5 -ffe-dee1596877de, Category = 'App.Controllers.Jobs'

Итак, я создал версию сертификата Base64String, на которую затем эта ошибка теперь возвращалась.

Exception = Hyak.Common.CloudException: ForbiddenError: серверу не удалось аутентифицировать запрос. Убедитесь, что сертификат действителен и связан с этой подпиской. в Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача задачи) в Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess (задача задачи) в Microsoft.WindowsAzure.Scheduler.JobOperationsExtensions.List (Параметры IJobOperationCarameters. Services.JobManager.ClearJobCollection () в techcaremobilewebservicesService.ScheduledJobs.dailyRoutines.CreateNotificationSchedule () в techcaremobilewebservicesService.ScheduledJobs.dailyRoutines.ExecuteAsync (), Id = 0000000000-000000000000

Итак, я нашел способ загрузить опубликованный профиль с портала Azure, вытащил из файла строку, составляющую сертификат управления, и попытался это сделать, но это тоже не удалось.

Сообщение = 'Попытка создать запланированное задание «Имя задания» завершилась неудачно со следующим сообщением: «Система не может найти указанный файл. '.', Exception = System.Security.Cryptography.CryptographicException: система не может найти указанный файл.

в System.Security.Cryptography.CryptographicException.ThrowCryptographicException (Int32 hr) в System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob (Byte [] rawData, пароль IntPtleCertFromBlob, и пароли System.SecurityCeyCryptographic, пароль для IntPtleCeyCeyCryptographic, пользовательский текст .X509Certificates.X509Certificate.LoadCertificateFromBlob (Byte [] rawData, Object password, X509KeyStorageFlags keyStorageFlags) в System.Security.Cryptography.X509Certificates.X509Certificate.Cryptography.X509Certificates. ), Id = 31dd37b3-53cb-4f8b-8873-6155f25913dd, Category = 'App.Controllers.Jobs'

Затем я нашел несколько флагов, которые было предложено добавить при создании сертификата.

X509KeyStorageFlags flags = X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable;

вернуть новый X509Certificate2 (Convert.FromBase64String (certRaw), string.Empty, flags);

Но тогда и это не удалось.

Message = 'Попытка создать запланированное задание «Имя задания» не удалась, появилось следующее сообщение: «Доступ запрещен. '.', Exception = System.Security.Cryptography.CryptographicException: доступ запрещен.

в System.Security.Cryptography.CryptographicException.ThrowCryptographicException (Int32 hr) в System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob (Byte [] rawData, пароль IntPtleCertFromBlob, и пароли System.SecurityCryptographic, пароль для пароля IntPterCeyCeyCynt32, dysqlags, пароль .X509Certificates.X509Certificate.LoadCertificateFromBlob (Byte [] rawData, Object password, X509KeyStorageFlags keyStorageFlags) в System.Security.Cryptography.X509Certificates.X509Certificate.Cryptography.X509Certificates.X509Certificate2..bileCertificates.X509CertificateStorageServiceServiceSertificateSertificateSertificate2..bileDataKey50 (байт) JobManager.GetStoreCertificate (отпечаток строки), Id = 07a6329b-f1ec-44b6-8446-12bcf616d336, Category = 'App.Controllers.Jobs'

Я был бы признателен за помощь в решении этой проблемы, так как я потратил больше времени, пытаясь исправить это, чем то, сколько времени заняла фактическая разработка: -S


person Geek    schedule 16.09.2015    source источник


Ответы (1)


Проблема в том, что вам необходимо авторизовать свою мобильную службу, чтобы иметь возможность управлять службой планировщика. Для этого требуется набор сертификатов, поскольку выполнение этих операций управления из пользовательского кода небезопасно.

Дополнительную информацию см. В этом документе: Проверка подлинности запросов на управление службами

У Брэди Гастера есть отличная пошаговая запись в блоге о том, как это сделать для веб-сайтов Azure, процедура аналогична для мобильных служб: Управление веб-сайтами с веб-сайтов с помощью библиотек управления Azure для .NET

person lindydonna    schedule 06.10.2015
comment
Отлично погляжу - person Geek; 07.10.2015