защита основных данных asp.net: при десериализации токена возникло исключение

Я запускаю ядро ​​​​asp.net на веб-ферме, используя Redis в качестве хранилища для защиты данных.

мое приложение находится под большой нагрузкой, поэтому я постоянно получаю следующую ошибку от Redis:

Время ожидания выполнения EVAL, inst: 9, очередь: 1448, qu: 0, qs: 1448, qc: 0, wr: 0, wq: 0, in: 65536, ar: 0, clientName: xxxx

Способ инициализации Redis в startup.cs с использованием рекомендация Microsoft была

var redis = ConnectionMultiplexer.Connect("<URI>");
services.AddDataProtection()
    .PersistKeysToRedis(redis, "DataProtection-Keys");

поэтому после прочтения некоторых статей о том, что Redis не является потокобезопасным, я изменил инициализацию Redis на потокобезопасную, как это предлагается в azure и здесь

private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() => {
    return ConnectionMultiplexer.Connect("mycache.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");
});

public static ConnectionMultiplexer Connection {
    get {
        return lazyConnection.Value;
    }
}

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

Токен защиты от подделки не может быть расшифрован. ---> System.Security.Cryptography.CryptographicException: Ключ {xxxxxxx} не найден в связке ключей.

or

При десериализации маркера возникло исключение.

or

Ошибка снятия защиты файла cookie сеанса.

or

System.Security.Cryptography.CryptographicException: ключ {xxxxx} не найден в связке ключей.

в чем проблема и что мне делать?

я должен снова изменить инициализацию? но тогда приложение остановится при большой нагрузке.

Обновлено

Дополнительная информация:

я случайно использовал неправильную строку подключения для Redis и снова изменил ее на правильную.

Конечно, могут быть и другие ошибки, вызывающие эту ошибку.

Как я могу обработать и смягчить эту ошибку сейчас?

Ошибка ясна, и, возможно, ее невозможно воспроизвести на другой среде разработки.

Но должен быть способ справиться с такой ошибкой.


person Amir Jalali    schedule 30.04.2017    source источник
comment
Никто не сможет воспроизвести вашу проблему с помощью предоставленного вами кода. Ошибки не обязательно связаны с использованием Redis. Скорее всего, ваша реализация неправильно обрабатывает ошибки или несуществующие ключи.   -  person MichaC    schedule 30.04.2017
comment
как я могу изящно обрабатывать несуществующие ключи?   -  person Amir Jalali    schedule 30.04.2017
comment
для получения дополнительной информации я случайно использовал неправильную строку подключения для Redis и снова изменил ее на правильную.   -  person Amir Jalali    schedule 30.04.2017


Ответы (1)


Чтобы избежать ошибки защиты данных, вы можете запустить скрипт PowerShell. https://raw.githubusercontent.com/aspnet/DataProtection/dev/Provision-AutoGenKeys.ps1. вам просто нужно запустить скрипт от имени администратора и указать имя пула приложений

person Vishnu Shanmughan    schedule 17.11.2017
comment
Похоже, что он перемещен в raw.githubusercontent.com/aspnet /AspNetCore/мастер/источник/ - person Eric Damtoft; 04.12.2018