Невозможно создать подписку на Microsoft Graph API с использованием самозаверяющего сертификата C# X509Certificate2.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно создать подписку на Microsoft Graph API с использованием самозаверяющего сертификата C# X509Certificate2.

Сообщение Anonymous »

Я пытаюсь создать подписки в API Graph и пытаюсь включить данные ресурсов. Я читал эту документацию Microsoft, чтобы попытаться создать ключи в коде, и получил следующий код, который был создан с помощью этого ответа о переполнении стека:

Код: Выделить всё

using var rsa = RSA.Create(4096);

var certificateRequest = new CertificateRequest("CN=testCertificate", rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);

// Make sure the key can only be used for encryption purposes
certificateRequest.CertificateExtensions.Add(new X509KeyUsageExtension(X509KeyUsageFlags.EncipherOnly, true));

var selfSignedCertificate = certificateRequest.CreateSelfSigned(DateTimeOffset.Now, DateTimeOffset.Now.AddYears(1));

using var exportedCertificate = new X509Certificate2(selfSignedCertificate.Export(X509ContentType.Pfx));

var x509PublicKey = Convert.ToBase64String(exportedCertificate.GetPublicKey());
var rsaPrivateKey = Convert.ToBase64String(rsa.ExportRSAPrivateKey());
Я пробовал:
  • Использовать разные алгоритмы хеширования
  • Не указывать X509KeyUsageExtension
  • Экспорт сертификата как X509ContentType.Cert и использование его в качестве открытого ключа
После создания этого сертификата я использую следующий код, чтобы попытаться создать подписку:

Код: Выделить всё

var requestBody = new Subscription
{
ChangeType = "created,updated",
NotificationUrl = _notificationUrl,
LifecycleNotificationUrl = _lifecycleUrl,
Resource = resource,
ExpirationDateTime = DateTime.UtcNow.AddDays(3),
ClientState = _clientState,
IncludeResourceData = true,
EncryptionCertificate = x509PublicKey,
EncryptionCertificateId = certificateId
};

graphClient.Subscriptions.PostAsync(requestBody, cancellationToken: cancellationToken);
Это сработает, если я удалю includeResourceData,

Код: Выделить всё

EncryptionCertificate
и EncryptionCertificateId, но в противном случае я получаю ответ HTTP 400, в котором говорится:

Ошибка проверки сертификата: невозможно найти запрошенный сертификат. объект.

Если у кого-нибудь есть идеи или примеры того, как обойти эту ошибку, мы будем очень признательны.

Подробнее здесь: https://stackoverflow.com/questions/786 ... rp-x509cer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»