0

我有一个简单的 CLI 应用程序来创建/更新/删除 SqlMembershipProvider 的用户。它可以工作,我可以从 CLI 应用程序中很好地验证。

但是,一旦我尝试从相关的 asp.net 应用程序执行此操作,它就会失败。我已经复制/粘贴了相关的 web.conf/app.config 部分,所以我不知道它为什么会失败。

<machineKey validationKey="C94FA3782AAF21E932CAA92DC2A0641951E3A76E50DD25B19C627BA01E259C6CBC7839A7803A59EF3BF855152369A6AB10CC259513BE7ACA4E842B962FD1D8A4"
                decryptionKey="2EA6D270AD94361ECFDCED5070D76FD67D9A147FEEBC8388FE9B73B450A04560"
                validation="SHA1"
                decryption="AES" />

    <membership defaultProvider="MembershipProvider">
      <providers>
        <add name="MembershipProvider" type="System.Web.Security.SqlMembershipProvider" 
             connectionStringName="ApplicationServices" 
             enablePasswordRetrieval="false" 
             enablePasswordReset="true" 
             requiresQuestionAndAnswer="false" 
             requiresUniqueEmail="false" 
             maxInvalidPasswordAttempts="5" 
             minRequiredPasswordLength="1" 
             minRequiredNonalphanumericCharacters="0" 
             passwordAttemptWindow="10" 
             passwordStrengthRegularExpression=""/>
      </providers>
    </membership>

这在 web.config 和 app.config 中都有,有人可以解释为什么这将在 CLI 项目而不是 asp.net 项目中验证吗?

需要明确的是,这里是不是验证的代码

Membership.ValidateUser("fake", "fake") // actual test un/pwd combo

我已经验证 un/pwd 实际上是正确的。

4

1 回答 1

1

在不了解您的应用程序的任何其他信息的情况下,似乎最有可能的问题是配置文件中的 members/providers/add 节点中的 applicationName 属性。请参阅http://msdn.microsoft.com/en-us/library/system.web.security.membership.applicationname.aspx

这些应用程序可能默认使用单独的应用程序名称/标识符。因此,当您尝试通过 Web 应用程序登录时,提供商只会看到授予 CLI 应用程序的访问权限。CLI 应用程序可能无法访问 Web 根目录或虚拟路径信息(没有 http 上下文)来创建默认名称,因此它可能默认为不同于您的 Web 应用程序应用程序名称的名称。

Look at this link for a good explanation: http://weblogs.asp.net/scottgu/archive/2006/04/22/Always-set-the-_2200_applicationName_2200_-property-when-configuring-ASP.NET-2.0-Membership-and-other-Providers.aspx

You can handle this in two ways:

  • Try setting the applicationName to the same string in both configurations.

OR

  • Ensure that there are two entries for the user "fake" in the aspnet_Membership table. One for the CLI app and one for the Web app. You should find the applicationID for each application listed in the aspnet_Application table.

Here is another reference where someone used the SqlMembershipProvider outside of an asp.net app: http://mdrasel.wordpress.com/2011/02/01/asp-net-membership-provider-outside-of-web-application/. Note the use of the applicationName attribute.

于 2013-02-13T06:25:30.970 回答