我有两个网站,它们都在自己单独的 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>
最佳答案
听起来您正在使用的 SqlMembershipProvider 会生成一个随机的 128 位值作为盐。即,它在对用户密码进行散列作为安全措施时包含此值。为了确保两个独立的系统产生相同的散列,您需要确保同一用户的 PasswordSalt 列值相同。 MembershipUser 上没有用于设置 PasswordSalt 的属性。这意味着您必须直接转到数据库来设置它,使用此属性构建自定义 MembershipUser 并能够保存它,或者构建提供此功能的自定义类或方法。
关于.net - ASP.NET:跨应用程序的表单例份验证:匹配密码加密设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5872539/