У меня есть приложение ASP.Net C #, которое должно подключаться к внешнему API с помощью WebServices каждые 5 минут.
Требования к внешнему веб-сервису следующие:
- Требуется имя пользователя и пароль
- Я должен передавать имя пользователя и пароль при каждом запросе веб-сервиса
- Срок действия паролей истекает каждые 90 дней и должен быть изменен до истечения срока действия
- Пароли не могут быть изменены вручную (человеком), мое приложение должно подключиться к отдельной веб-службе смены пароля для смены пароля.
- Мое приложение должно генерировать каждый новый пароль на основе набора правил.
- Пароли никогда не могут быть использованы повторно.
- Требуются ограничения по SSL, сертификатам и брандмауэру
Я собрал все предыдущие, но у меня есть одна проблема. Какова наилучшая практика для хранения текущих и исторических паролей?
Очевидно, что сохранение незашифрованного пароля является плохим решением. Мне нужно, чтобы мой веб-сервис прочитал пароль и передавал его при каждом запросе. Мне также нужно иметь доступ ко всем историческим паролям, чтобы убедиться, что мой новый пароль не является дубликатом.
В идеале я хотел бы хранить каждый (зашифрованный) пароль в своей базе данных и расшифровывать его всякий раз, когда мне нужно позвонить в веб-службу. Есть ли лучшая практика, которой я должен следовать? Должен ли я шифровать каждый пароль с помощью Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Cryptographer.EncryptSymmetric (..)?
Примечание. К сожалению, у меня нет доступа к изменению способа работы внешнего API. Я должен следовать предоставленным правилам.