4

我有一个管理站点设置为另一个网站内的虚拟应用程序。

我希望使用在主父站点上设置的相同表单身份验证提示访问子目录(虚拟应用程序)的访问者提供凭据

尝试了各种方法但无法正常工作,包括

从 virtual-app web.config 中删除所有<authentication mode="Forms">、和部分<authorization><membership><roles>

<authentication mode="Forms">将相同的<authorization><membership><roles>部分从父级复制到虚拟应用 web.config

使用虚拟目录而不是虚拟应用程序

但我从来没有得到凭据提示

有谁知道如何获得这个设置?

谢谢

更新:

现在让它从父级继承权限,方法是删除 IIS 中的应用程序名称(使其成为虚拟目录而不是虚拟应用程序)

但是,这会破坏管理站点中的所有路径

例如,我收到以下错误

文件“/Site.master”不存在。

那么我应该使用虚拟目录(它似乎继承了父级的身份验证)吗?

还是一个虚拟应用程序(目前没有从父级继承身份验证但具有正确的相对路径)?

这是父配置

<membership defaultProvider="SqlServerMembershipProvider">
            <providers>
                <add connectionStringName="xxxxxxxx" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" name="SqlServerMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
            </providers>
        </membership>
        <roleManager enabled="true" defaultProvider="SqlServerRoleProvider">
            <providers>
                <add connectionStringName="xxxxxxx" applicationName="/" name="SqlServerRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
            </providers>
        </roleManager>

        <authentication mode="Forms">
            <forms name=".EPiServerLogin" loginUrl="login.aspx" timeout="120"/>
        </authentication>
        <authorization>
            <deny users="?"/>
        </authorization>
4

3 回答 3

2

我需要使用单点登录解决方案,如此处所述

http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

要点是,每个站点都需要对 cookie 值使用相同的加密密钥。所以这个 machineKey 元素需要添加到 Single Sign On 中涉及的每个站点

于 2010-03-16T17:21:13.993 回答
1

你是如何配置授权的?

另外,我假设您尚未在父站点中进行身份验证?

在 admin 子目录中,您的 web.config 中应该有类似以下内容(显然您可能还有更多信息):

<configuration>
  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>
</configuration>

这将拒绝所有匿名用户,但允许所有经过身份验证的用户访问。如果您使用角色提供者只允许某些角色,您可以轻松地扩展它:

      <allow roles="Admin" />
      <deny users="*" />

请注意,您需要在其中“拒绝所有用户”,因为默认行为是允许所有用户。授权是“自上而下”的,因为它从列表的顶部开始,一旦找到匹配项,它就会停止处理,因此如果用户处于“管理员”角色,它不会到达“拒绝”所有用户”规则。

您还可以使用<location>元素在根 web.config 中进行配置。

回复评论

并且您的身份验证/授权都在父站点中工作?

您能否编辑您的问题以包含您尝试过的(已清理的)web.config 部分,以便我们可以查看是否有任何明显缺失的内容 - 例如,如果您使用角色来锁定管理区域,则您已启用它(<roleManager enabled="true">,默认为false)。

于 2010-03-15T13:34:58.447 回答
0

我们在这里经常做你想做的事情。

我们这样做:根级别是一个虚拟应用程序,它包含主 web.config 和 global.ascx。我们有一个普通的文件夹,里面有“Admin”。在其中,我们有一个小的 web.config,它只包含<authorization>XML 信息。您将需要一个登录页面,无论是根文件夹还是管理员文件夹。

在您的帖子中,我有点困惑是否涉及三个应用程序/目录(应用程序、父应用程序、应用程序的管理员),还是只有两个(应用程序和它的管理员)。我在这里做出一个重要的假设,即它是两个。如果你确实拥有这三个,要让这件事继续下去,还需要做更多的工作。

替代文字

于 2010-03-16T17:38:27.337 回答