Членство.ValidateUser всегда возвращает false на IIS
Членство.Методы ValidateUser работают на сервере разработки(iis express и cassini). Но на моем IIS (его публикация в качестве приложения на моей машине разработки) он всегда возвращает false.
Даже пользователь одобрен, не заблокирован и имя пользователя и пароль верны. Ошибки трассировки нет. ?
Http-запрос 1: davutg-pc:6423/BpmService / Login?userName=abc & password=0035
Результат 1: true
Http-запрос 2: davutg-pc/BPM/BpmService / Login?userName=abc & password=0035
Результат 2: false
Вот мои настройки
<roleManager enabled="true" defaultProvider="MySQLRoleProvider"/>
<machineKey validationKey="E8B40EEA5A8EFC6F...key" decryptionKey="385..." validation="SHA1" />
<membership defaultProvider="MySQLMembershipProvider" hashAlgorithmType="SHA1">
<providers>
<remove name="MySQLMembershipProvider" />
<add type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.5.5.0, Culture=neutral,
PublicKeyToken=c5687fc88969c44d"
name="MySQLMembershipProvider"
connectionStringName="LocalMySqlServer"
minRequiredPasswordLength="3"
minRequiredNonalphanumericCharacters="0"
requiresUniqueEmail="false"
requiresQuestionAndAnswer="false"
passwordFormat="Encrypted"/>
Я сравнил машину.конфигурации-это те же фреймворк 64 и фреймворк.
Он работает на сервере разработки, но на IIS всегда возвращает false. Я могу запрашивать различные службы с помощью IIS, и такой проблемы нет.
КРОМЕ ТОГО: Когда я вхожу неправильно пароль "FailedPasswordAttemptCount" увеличен для сервера разработки. Но это не меняется для IIS . Что происходит не так с IIS. Я просто называю членство.ValidateUser (user,pass)
Любое предложение будет оценено !
1 ответ:
Решено! Надеюсь, это сэкономит чье-то время.
Проблема заключалась в имени приложения .
Хост: порт / служба
Хост/BPM / Service
Примечание: BPM-это имя приложения, которое вы даете ему в IIS.
Алгоритм шифрования членства использует "ApplicatonName". При настройке applicaton я использовал BPM в качестве имени приложения. на сервере разработки" имя " возвращает "/". Но его " BPM " на IIS !
Все мои старые пароли были сгенерированы с именем appliacion"/". Поэтому всегда указывайте имя приложения. Прочитайте этустатью из блога Скотта-ГУ.
public bool Login(string userName,string password) { var provider = Membership.Provider; string name = provider.ApplicationName; return Membership.ValidateUser(userName, password); }
//неправильно
<membership> <providers> <clear/> <add name="AspNetSqlMembershipProvider" type="System...bla bla" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" //Wrong /> </providers> </membership>
/ / правый
<membership> <providers> <clear/> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.S.. bla bla" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="MyAPPNAME" //Well :) /> </providers> </membership>