Предоставленная полезная нагрузка не может быть расшифрована, поскольку она не была защищена этим поставщиком защиты - PullRequest
0 голосов
/ 25 марта 2019

Я использую API защиты данных из .NetCore, но при снятии защиты полезной нагрузки с помощью DangerousUnprotect () из IPersistedDataProtector я получаю указанное сообщение об ошибке.

Я создал один экземпляр протектора, используя CreateProtector («цель») IDataProtectionProvider и используя его в различных API для защиты () и отмены () данных.Оба API работают нормально для всех выполненных запросов, однако после отзыва ключа я преобразую dataProtector в IPersistedDataProtector, а затем он продолжает выдавать ошибку «Предоставленная полезная нагрузка не может быть расшифрована, поскольку она не защищена этим поставщиком защиты».

Я понимаю, что сообщение является верным с точки зрения кода, но не смог понять, что его вызывает.Я использую одно и то же имя приложения и строку назначения.

Я также сравнил экземпляры защитника, и они совпадают с одним экземпляром поставщика защиты данных.Кто-то может посоветовать, пожалуйста, как это можно отследить?

целевой пакет: Microsoft.AspNetCore.DataProtection (2.1.1)

Также посещенные проблемы, но не видны какие-либо исправления / релевантная информация для этого.

// inside .ctor
var services = new ServiceCollection();
services.AddDataProtection().SetApplicationName("ApplicationName");


var serviceProvider = services.BuildServiceProvider();
this.dPProvider = serviceProvider.GetDataProtectionProvider();
this.protector = this.dPProvider.CreateProtector("purpose");

public string Decrypt(string cipherText)
        {
            try
            {
                return this.protector.Unprotect(cipherText);
            }
            catch (Exception exception)
            {
                var persistedProtector = this.protector as IPersistedDataProtector;
                if (persistedProtector == null)
                {
                    throw new Exception($"Protector cannot be null. Also {exception.Message}");
                }
// exception is thrown at below line.
                var unprotectedPayload = persistedProtector.DangerousUnprotect(Encoding.UTF8.GetBytes(cipherText), true, out var requiresMigration, out var wasRevoked);
                if (wasRevoked)
                {
                    return Encoding.UTF8.GetString(unprotectedPayload);
                }

                throw new CryptographicException($"Invalid operation. Also {exception.Message}", exception);
            }
        }

трассировка стека: в Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore (Byte [] protectedData, логическое значение allowOperationsOnRevokedKeys, UnprotectStat.Data.Tec.DangerousUnprotect (Byte [] protectedData, Boolean ignoreRevocationErrors, Boolean & requiredMigration, Boolean & wasRevoked)

...