Рекомендации по хранению и обновлению паролей внешнего API

У меня есть приложение ASP.Net C #, которому необходимо подключиться к внешний API через WebServices каждые 5 минут.

Требования к внешнему веб-сервису следующие:

  • Требуются имя пользователя и пароль
  • Я должен передавать имя пользователя и пароль с каждым запросом веб-сервиса.
  • Срок действия паролей истекает каждые 90 дней и должен быть изменен до дата истечения срока действия
  • Пароли не могут быть изменены вручную (человеком), мое приложение должно подключаться к отдельной веб-службе смены пароля, чтобы изменить пароль.
  • Мое приложение должно генерировать каждый новый пароль на основе набора правил.
  • Пароли никогда не могут быть повторно использованы.
  • Требуются SSL, сертификаты и IP-ограничения межсетевого экрана

Я построил все предыдущие, но в настоящее время у меня есть одна проблема. Как лучше всего хранить текущий и исторический пароли?

Очевидно, что сохранение пароля в виде открытого текста - плохое решение. Мне нужно, чтобы мой веб-сервис считывал пароль и передавал его с каждым запросом. Мне также нужно иметь доступ ко всем историческим паролям, чтобы убедиться, что мой вновь сгенерированный пароль не является дубликатом.

В идеале я хотел бы хранить каждый (зашифрованный) пароль в своей базе данных и расшифровывать его всякий раз, когда мне нужно для вызова веб-службы. Есть ли лучшая практика, которой я должен следовать? Следует ли мне шифровать каждый пароль с помощью Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Cryptographer.EncryptSymmetric (..)?

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

9
задан ChrisBint 29 June 2011 в 00:46
поделиться