【问题标题】:Membership.ValidateUser always returns false after upgrade to VS 2010 / .NET 4.0Membership.ValidateUser 在升级到 VS 2010 / .NET 4.0 后总是返回 false
【发布时间】:2011-02-13 08:58:30
【问题描述】:

不确定这是否与 VS 2010 或升级的框架有关,但是……我们正在使用 Oracle 成员资格提供程序来验证用户。在升级之前一切正常,但现在Membership.ValidateUser(user, password) 返回false,尽管凭据有效。没有抛出异常,因此很难确定问题可能是什么。 VS 2010 中的网站管理工具仍然能够管理用户和角色(或多或少),所以我没有理由质疑连接性。可能是什么问题?

【问题讨论】:

    标签: c# asp.net oracle asp.net-membership


    【解决方案1】:

    听起来有点像我遇到的问题..

    将 machineKey 元素添加到 web.config 而不是 hashAlgorithmType="SHA1" 解决了问题..但我仍然不明白为什么我需要把它放在那里...也找不到任何文档..

    你可以在这里查看我的问题.. The user name or password provided is incorrect. in MVC 3 Internet Application

    【讨论】:

      【解决方案2】:

      您可能遇到机器密钥不一致。

      在 web.config 中 - 隐式 machineKey 部分使用自动生成的加密和验证密钥,这些密钥再次针对应用 ID (AutoGenerate,IsolateApps) 进行加密。

      您是在使用不同的应用程序实例还是在另一台机器上进行测试?

      Oracle 会员提供程序是 2.0 还是 4.0?

      而这只是暗中的尝试,也许这会引导你找到解决方案。

      来自.NET Framework 4 Migration Issues

      会员类型

      在 ASP.NET 成员资格中使用的某些类型(例如 System.Web.Security.MembershipProvider)已从 System.Web.dll 移至 System.Web.ApplicationServices.dll 程序集。移动类型是为了解决客户端和扩展 .NET Framework SKU 中类型之间的架构分层依赖关系。

      从早期版本的 ASP.NET 升级并使用已移动的成员类型的类库在 ASP.NET 4 项目中使用时可能无法编译。如果是这样,请在类库项目中添加对 System.Web.ApplicationServices.dll 的引用

      【讨论】:

      • 我们编译没有问题,Oracle 会员提供程序 2.0 和 4.0 都出现了问题。
      【解决方案3】:

      答案(根据this post)是在Web.config中指定hashAlgorithmType="SHA1"

      <membership defaultProvider="OracleMembershipProvider" hashAlgorithmType="SHA1"/>
      

      这并没有解决现有用户的问题,但是新创建的用户现在可以登录了。

      【讨论】:

      • 我猜对于新创建的用户来说,添加hashAlgorithmType 是一个红鲱鱼。尝试在没有它的情况下添加和验证新用户。我怀疑问题与自动生成的机器密钥有关。我正在写一些测试。将更新答案。
      • 新创建的用户可以在另一个(开发)盒子上进行身份验证,所以我认为 hashAlgorithmType 解决了这个问题。
      • @nw - 感谢您的回答,因为我遇到了同样的问题,并且我的头撞到了墙上好几个小时。似乎没有任何文档说明升级到 .net 4.0 时必须进行此更改。
      猜你喜欢
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多