我正在使用Web.config
中配置的成员资格提供程序来使用SQL CE:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=|DataDirectory|\Users.sdf" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
和
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<clear />
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordFormat="Hashed" applicationName="/" />
</providers>
</membership>
如果我没有指定机器密钥,这可以正常工作。
如果我将机器密钥添加到Web.config
,如下所示,则现有用户将无法再登录。但是我可以创建新用户,他们可以登录。
<machineKey validationKey="D829F10BE92767EC2F9E9FC53B2CF3952AAD386483D6E81E74B4BD84DBE66F71CA121581598FEA669892DBDE46507DF3C8028BBD8FD4E678557621141945171C" decryptionKey="D14678D1FB1777E10316163F6D97071CDF2A447FA15C172DC9525BA397BB0610" validation="SHA1" decryption="AES" />
<pages enableViewStateMac="true"/>
如果我删除了机器密钥,那么最初创建的用户可以再次登录,而新创建的用户则无法登录。
为什么添加一个machinekey会改变现有用户是否可以登录,因为密码是经过哈希加密的?
答案 0 :(得分:3)
默认情况下,.Net Framework 4使用SHA256。请确保两个地方的算法相同,并尝试使用SHA1或SHA256。
<membership ... hashAlgorithmType="SHA1">
<providers>
...
</providers>
</membership>
<machineKey ... validation="SHA1" decryption="AES" />