Я развернул веб-задание (.Net 4.6), которое шифрует некоторые строки URL-адресов и отправляет их клиентам по электронной почте. Я использовал IDataProtector .NET Core для шифрования, и мне пришлось вручную ссылаться на DLL, поскольку webjob .net 4.6 не поддерживал свою библиотеку.
Например, в веб-задании:
IDataProtector protector = provider.CreateProtector("myProtector")
http://test.com/Email/Agreement?n=" + protector.Protect(name) + "&a=" + protector.Protect(address)
что становится ссылкой
http://test.com/Email/Agreement?n=CfDJ8AAAAAAAAAAAAAAAAAAAAAD96g09022UwEG-GyVftzkm-n2JuL1hmvL5HLyghXliIgJ_N014EBqBFfWjmdA&a=CfDJ8AAAAAAAAAAAAAAAAAAAAAALoq9IuMBZKozhzH3jRaHpyFE1wtXzQK3T_0RNuX9LsSVxPITWgU9ZR21jXLk3YGjt
в электронном письме.
когда клиенты нажимают на ссылку url в своем электронном письме, он переходит к контроллеру моего клиентского приложения (.Net Core 1.1), чтобы расшифровать строку url, чтобы открыть страницу соглашения.
Ex:
public EmailController(IDataProtectionProvider provider)
{
_protector = provider.CreateProtector("myProtector");
}
public IActionResult Agreement(string n, string a)
{
var decryptName = _protector.Unprotect(n);
var decryptAddress = _protector.Unprotect(a);
}
Однако при попытке снять их защиту я получаю следующее сообщение об ошибке:
System.Security.Cryptography.CryptographicException: «Ключ {00000000-0000-0000-0000-000000000000} не найден в связке ключей».
Когда я искал ответ, я понял, что могу настроить Data Protection для хранения ключей к хранилищу BLOB-объектов Azure. Это ссылка показывает мне, как сохранить ключи к хранилищу BLOB-объектов Azure.
Вопросов:
- Что является лучшим подходом, кроме хранения ключа к хранилищу BLOB-объектов Azure?
- Если я на правильном пути, как мне его сохранить?
- Как мне настроить тот же параметр для проекта веб-задания, который показан в ссылке, для которой нет Startup.cs?
Помощь очень ценится.