【问题标题】:ASP.NET 4 Membership Machine KeyASP.NET 4 成员计算机密钥
【发布时间】:2012-01-02 20:27:54
【问题描述】:

我有一个工作的 asp.net 4 会员网站大约 5 个月,今天我更改了正则表达式以放松密码限制。我仍然可以创建和访问新帐户,但无法再访问之前注册的任何帐户。

我检查了数据库并确认它们都还在。我最初的想法是密码错误。我检查了两个我知道密码的帐户,但都无法访问。我尝试使用密码恢复选项,但是当我输入用户名时,我被告知该用户不存在。

当我检查数据库并同时查阅成员表和个人资料表时,新老用户、正则表达式更改前后的用户都在同一个表中。这将我引向我的最终发现,也是我没有经验的发现。是否有一个新的机器密钥正在创建新用户但无法破译旧用户,从而使它们不可用?如果是这样,我该如何解决这个问题?

【问题讨论】:

  • 刚刚注意到会员表中新用户的应用程序 ID 不同。这会导致错误吗?如果是这样,我如何将其更改回旧的?

标签: asp.net machinekey


【解决方案1】:

就像您的评论一样,我的第一个想法是应用程序密钥已被更改。此密钥存储在 web.config/system.web/membership 中:

<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider"
      ...
      applicationName="YOUR_KEY_HERE" />
  </providers>
</membership>

此密钥允许具有相同会员提供程序的不同应用程序(例如您的情况下为 System.Web.Security.SqlMembershipProvider)使用相同的数据库来存储会员数据。

一个提供者不会看到来自另一个提供者的用户,反之亦然,因为他们在查询数据库时会考虑应用程序名称。但是当您查看 Users 表时,您可能不会立即注意到这种关系,因为 SqlMembershipProvider 在 Users 表中使用了 Guid。但它是 Applications 表的外键,您可以在其中找到应用程序名称。

另请参阅:Always set the "applicationName" property when configuring ASP.NET 2.0 Membership and other Providers

【讨论】:

    【解决方案2】:

    我的问题略有不同*,但我在 web.config 中指定了我自己的机器密钥。在此处查看详细信息:http://msdn.microsoft.com/en-us/library/ff649308.aspx

    (* 我的应用在大型虚拟化服务器场中从一个服务器到另一个服务器徘徊,因此每次跃点都会更改机器密钥,导致应用无法读取之前设置的 cookie。)

    【讨论】:

    • 谢天谢地,这与机器密钥无关。这是应用程序名称的更改,因为我制作了该网站的副本以进行一些重大更改并从副本上传,因此新成员可以访问他们的帐户,但以前的成员不能。我通过将两个应用程序名称添加到 web.config 文件来解决这个问题,嘿,它工作正常!
    猜你喜欢
    • 2019-09-08
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多