Я реализую аутентификацию для страницы ASP.Net MVC5, используя ASP.Net Identity 2 и LDAP в качестве хранилища для пользователей. Я не использую OWIN.
Я начал создавать свой собственный IUserStore, полученный из IUserPasswordStore
. Этот интерфейс должен реализовывать три метода:
GetPasswordHashAsync
SetPasswordHashAsync
HasPasswordAsync
Теперь мне интересно, как проверить пароль для пользователя, поскольку UserManager
предлагает только метод CheckPasswordAsync
, который принимает объект пользователя и введенный пароль. Мое предположение, как это работает, выглядит следующим образом:
- Этот метод использует
Passwordhasher
, и это VerifyHashedPassword
метод.
VerifyHashedPassword
затем получает хешированный пароль, предоставленный методом IUserStore
s GetPasswordHashAsync
.
- Поэтому я мог бы реализовать свой собственный хеш-пароль и проверить предоставленный пароль по сохраненному хешу пароля
Если эти предположения верны и это может быть решением, я задаюсь вопросом о безопасности. Каково правильное место для выполнения хеширования и проверки этих хешей ... все это должно происходить внутри LDAP (решение не будет работать) или лучше хешировать пароль перед отправкой в LDAP для хранения, а затем проверить хешированный пароль сам?
Может ли получение хешей паролей из LDAP быть вектором атаки, по крайней мере, для извлечения хешей?
Существует ли совершенно другой подход в ASP.Net Identity для аутентификации по LDAP? Я знаю, что существует возможность аутентификации на основе внешнего механизма, но я ожидаю, что это будет необходимо для входа в систему через Google / Facebook и т. Д. которые представляют собственную форму ввода учетных данных и поэтому не подходят для LDAP.