【问题标题】:Using the forms authentication tables in ASP Identity在 ASP Identity 中使用表单身份验证表
【发布时间】:2015-04-11 08:56:00
【问题描述】:

我有一个使用 asp.net 中的表单身份验证创建的数据库,但现在我想开发一个使用相同用户名和密码的其他应用程序,并且应该能够登录到使用 MVC 5 开发的新应用程序Aspnet 身份。所以我希望能够使用他们的旧凭据在新应用中对用户进行身份验证。

我的旧数据库结构

我知道 Asp Identity 个人身份验证模式会生成其他表集,我也想停止此默认行为,因为我不希望在旧 Db 中创建 Identity 表。

请指导我如何实现这一目标。谢谢

【问题讨论】:

  • 使用 STS 怎么样?我认为它由 ASP.NET Identity 支持,没有时间仔细研究。
  • 没听说过。我去看看
  • STS 充当身份验证机构,它可以对所有应用程序进行身份验证,前提是它们已设置必要的基础设施。这意味着您的应用程序不必再为验证用户而烦恼,这将由 STS 为所有应用程序完成。但是你当然还是要授权。也许这对您将来构建的应用程序会很有趣。
  • 感谢朋友,这是一件令人兴奋的事情。

标签: asp.net asp.net-mvc asp.net-identity


【解决方案1】:

默认情况下,Web 窗体和 MVC 都使用 ASP.NET Membership。如果您的旧应用程序使用成员资格提供程序,那么将其适应 MVC 应该是相当容易的。如果没有,您可以选择创建一个使用现有数据库的新成员资格提供程序,或者替换 MVC 应用程序的身份验证机制。

我建议您以此为起点:http://weblogs.asp.net/jongalloway/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way

或者,您可以通过多种方式将用户帐户从旧应用程序迁移到新的 MVC 应用程序。如果不需要与旧应用程序向后兼容,这可能是您最好(最简单)的选择。

【讨论】:

  • 旧应用程序是使用 DefaultMembershipProvider 创建的,但是当我使用在旧 asp Forms 应用程序中创建的用户的用户名和密码验证用户时,我无法验证用户我的新应用使用 Membership,ValidateUser('email',"password")
【解决方案2】:

所以在我尝试过的事情之后。我已经搞定了。

1) 为网络提供商安装 nuget 包

Install-Package Microsoft.AspNet.Providers.Core

2) 复制这些网络配置部分并将它们添加到部分下的网络配置中

<profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=2.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" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>

3) 将默认连接字符串指向包含用户的现有数据库,或者您可以添加新连接字符串并在上述 Web 配置部分中使用该名称,将“DefaultConnection”替换为“newConnection”

现在你可以走了。

只需通过Membership.ValidateUser("username","password")验证用户的Validity

【讨论】:

    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多