ASP.NET: проверка подлинности с помощью форм в приложениях: соответствующие настройки шифрования пароля - PullRequest
4 голосов
/ 03 мая 2011

У меня есть два веб-сайта, которые создают пользователей в своих отдельных базах данных аутентификации ASP.NET. Ниже приводится Web.configs для обоих. Я также сделал записи базы данных aspnet_Applications идентичными для обоих решений. Когда я создаю пользователя, зашифрованные пароли не являются идентичными, равно как и соли паролей.

Есть идеи, как заставить два веб-сайта создавать одинаковые хеши паролей, когда обе системы имеют одинаковые имя пользователя и пароль?

<configuration>
  <system.web>
    <authentication mode="Forms" >
      <!-- The name, protection, path, validationKey, validation, decryptionKey,
           and decryption attributes must be identical across all applications. 
      -->
      <forms loginUrl="~/Account/Login"
             name=".ASPXAUTH" 
             protection="All"  
             path="/" 
             domain="contoso.com" 
             timeout="2880"
             requireSSL="false" 
             cookieless="UseCookies" 
             enableCrossAppRedirects="true" />
    </authentication>
    <!-- Validation and decryption keys must exactly match and cannot
         be set to "AutoGenerate". The validation and decryption
         algorithms must also be the same. -->
    <!-- The validationKey is not wrapped in the solution -->
    <!-- These keys are examples -->
    <machineKey
         validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D940
                        1E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51
                        F17C529AD3CABE" 
         decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" 
         validation="SHA1"
         decryption="Auto" />
  </system.web>
</configuration>

1 Ответ

4 голосов
/ 03 мая 2011

SqlMembershipProvider, который звучит так, как будто вы используете, генерирует случайное 128-битное значение в качестве соли. Т.е. оно включает это значение, когда хэширует пароль пользователя в качестве меры безопасности. Чтобы две независимые системы создавали один и тот же хеш, вам необходимо убедиться, что значение столбца PasswordSalt одинаково для одного и того же пользователя. В MembershipUser нет свойства для установки PasswordSalt. Это означает, что вам нужно либо перейти непосредственно в базу данных, чтобы установить его, создать пользовательский MembershipUser с этим свойством и возможностью сохранить его, либо создать собственный класс или метод, который предоставляет эту возможность.

...