【问题标题】:ASP.NET authentication - multi-app and multi-user databaseASP.NET 身份验证 - 多应用和多用户数据库
【发布时间】:2010-10-29 16:24:00
【问题描述】:

我们有一个使用 ASP.NET SqlMembershipProvider 的简单 ASP.NET 应用程序,一切都很好。

我们想在同一台服务器上创建第二个应用程序,同样使用 SqlMembershipProvider,但使用不同的“applicationName”,以便两个应用程序之间的用户帐户保持独立。

看起来这可以通过制作两个不同的应用程序域(即它们每个都有自己的 web.config)来实现,但我希望将它们放在不同的目录中,这样我就没有 3 个 web.config 了。必须保持同步的配置(每个应用一个,主一个)。所以我要的是:

/web.config
/APP1 (uses membership provider in /web.config, with userlist A)
/APP2 (uses membership provider in /web.config, with userlist B)

定义使用不同 'applicationName' 值的多个成员资格提供程序看起来很简单。

但是你如何告诉 system.web.authentication 节点使用哪个会员提供者呢?

据我所知,它将始终使用默认值。

【问题讨论】:

    标签: asp.net asp.net-membership forms-authentication membership-provider


    【解决方案1】:

    如果我正确阅读了您的场景,听起来这两个应用程序之间的唯一区别是“ApplicationName”属性。

    因此,如果您在两个应用程序中的每一个的 Application_Start(在 Global.asax 中)中设置它,您应该是黄金。

    protected void Application_Start(object sender, EventArgs e)
    {
        Membership.Provider.ApplicationName = "test";
    }
    

    【讨论】:

    • 不会有多个 Global.asax 文件(即一个在 APP1 文件夹中,一个在 APP2 文件夹中)需要单独的 web.config 文件吗? (我的假设是单独的 web.config 文件实际上定义了单独的“应用程序”)
    • 不,单独的 web.config 文件不会使其成为单独的应用程序。通过转到虚拟目录的属性并单击应用程序设置部分中的创建按钮,在 IIS 中配置应用程序。是的,您需要使用两个 web.config。
    • 是否有任何理由说明 application_start 逻辑不能更复杂一点,只需获取应用程序根目录并使用它来确定合适的名称?因此,如果没有多个 web.config 文件,两个具有不同根目录的应用程序可能会获得不同的名称?
    • 我不明白为什么不这样做。只要它们是静态的并且众所周知。用户被锁定到该 ApplicationName,因此如果名称更改,您将无法访问您的用户。
    【解决方案2】:

    使用您的结构,我认为您必须围绕 Membership 提供程序实现自己的包装器,有效地创建自己的提供程序,该提供程序只是填充请求并根据应用程序目录修改 appname 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多