2010-03-15 91 views
4

我有一个管理网站设置为另一个网站内的虚拟应用程序。在虚拟应用程序中忽略表单身份验证

我想观众子目录(虚拟应用程序)进行promtped使用相同的Forms身份验证设置主父网站上的凭据

是否尝试过各种各样的东西,但不能让它工作,包括

删除从虚拟应用程序的web.config

复制相同<authentication mode="Forms"><authorization>,所有<authentication mode="Forms"><authorization><membership><roles>节从父个<roles>部分的虚拟应用程序的web.config

使用的虚拟目录,而不是虚拟应用

但我从来没有得到promted凭据

任何人知道如何得到这个设置?

感谢

UPDATE:

现在得到它从父继承权限,在IIS中删除应用程序的名称(使它成为一个虚拟目录,而不是一个虚拟的应用程序)

但是,这会将管理站点中的所有路径都拧紧,例如:

例如我收到以下错误

文件'/Site.master'不存在。

所以我应该使用虚拟目录(这似乎从父母继承认证)?

或者一个虚拟应用程序(当前不从父代继承auth,但具有正确的相对路径)?

这里的父配置

<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> 

回答

1

我需要使用一个单一的标志上的解决方案,如这里所描述

主要点的存在,每个站点需要使用的cookie值相同的加密密钥。因此,此machineKey元素需要添加到涉及单点登录的每个站点。

+0

Bah,我通常也会提及机器键 - 我想我只是假设它是低于主要应用程序,它会分享它,很好知道供将来参考:S – 2010-03-17 19:30:28

1

你如何configured authorization

此外,我假设你还没有在父站点进行身份验证?

在admin子目录,你应该有这样的事情在你的web.config以下(很明显,你可以有更多的信息,在那里为好):

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

这将拒绝所有匿名用户,但允许所有经过认证的用户访问。如果您使用的是角色提供,仅允许某些角色,您可以轻松地扩展这个:

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

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

您也可以使用<location> element在根web.config中对此进行配置。

回复评论

而且你的认证/授权父站点的所有作品?

你可以编辑你的问题,包括(消毒)web.config部分你已经尝试过,所以我们可以看到是否有任何明显缺失 - 例如,如果你使用角色锁定管理区域,你有启用它(<roleManager enabled="true">,默认为false)。

+0

是的,我试过了,没有授权部分。允许所有annonymouse,拒绝所有匿名,甚至拒绝所有用途(*),但我永远不会提示输入凭据 – ChrisCa 2010-03-15 14:02:50

+0

是的,我没有在父站点中配置。我可以访问它,并重定向到登录页面,但是当我去/管理我可以查看该网站,而不被提示输入凭据 – ChrisCa 2010-03-15 14:15:18

+0

我的意思是说“认证”,而不是“配置”在最后的评论 – ChrisCa 2010-03-15 14:21:50

0

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

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

我在你的文章中是否有涉及三个应用程序/目录(应用程序,父应用程序,应用程序的管理员)或仅两个(应用程序&它是管理员)有点困惑。我在这里做了一个关键的假设,那就是两个。如果你确实有三个,那么将会有更多的工作去做这件事。

alt text http://i42.tinypic.com/t5j028.png

+0

是的,它只是2个站点。家长(主要顶级网站)和管理员(这是子网站) 它现在被分类 - 我需要做的是我在上面发布的单点登录文章中的建议之一 – ChrisCa 2010-03-16 17:44:31

相关问题