Хеширование больше не работает в .Net 4.0, несмотря на обходные пути MSDN - PullRequest
3 голосов
/ 09 августа 2010

У меня есть существующее приложение, которое использует SqlMembershipProvider и имеет указанный машинный ключ:

<machineKey validationKey="..." decryptionKey="..." 
            validation="SHA1" decryption="AES"/>

В настоящее время оно работает под .Net 2.0 AppPool.

Я пишу новоеприложение, которое должно использовать существующую базу данных, из которой у меня есть резервная копия.Я пытаюсь заставить SqlMembershipProvider работать с ним (что он делает), но я не могу заставить работать известное имя пользователя / пароль.Эта учетная запись работает в prod, а хэш и соль пароля одинаковы в обеих базах данных (prod и моя).Однако в тот момент, когда SqlMembershipProvider сравнивает пароль из базы данных с введенным хешированным паролем, они не совпадают.

В этой статье предлагается прервать изменения с помощью алгоритма хеширования по умолчанию в ASP.Net в .Net 4.0: http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes

Однако я уже указываю ключ машины в соответствии с предложением.Кроме того, я удалил компоненты .Net 4.0 и сбросил его до 3.5 (что означает CLR 2), и хэш введенного пароля остается прежним.

Кроме того, я попытался повторно развернуть это новое временное приложение на том же сервере, на котором запущено производство, и все равно не удается войти в систему (хотя я не могу проверить, происходит ли сбой из-за несоответствия хэша пароля).

Что еще я могу попробовать здесь?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Вам необходимо указать hashAlgorithmType провайдера членства в web.config, поскольку значение по умолчанию изменилось на .net 4.

Скорее всего, вы хотите получить значение SHA1.

Пожалуйста, смотрите следующую страницу для более подробной информации: http://geekswithblogs.net/DavidHoerster/archive/2010/06/15/asp.net-membership-password-hash----.net-3.5-to-.net-4.aspx

0 голосов
/ 01 февраля 2011

Сначала скопируйте производственное приложение в dev / test и запустите его там, чтобы увидеть, работает ли оно должным образом. Если это произойдет, перейдите к обновлению проекта для запуска в .NET 4.0, но не изменяйте любой другой код (т. Е. Не пытайтесь заставить его работать с SQLMembershipProvider) - повторно протестируйте приложение Если это работает, вы знаете, что это не проблема среды, и это не проблема критических изменений .NET, которая может указывать на то, что что-то в вашем коде не работает так, как вы ожидаете, что оно должно работать. Я предполагаю, что алгоритм хеширования, который вы используете в новом приложении, отличается от того, который использовался в старом приложении. Вы солили пароль в старом приложении? Вы используете ту же соль в новом приложении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...