对Sitecore项目的匿名访问

对Sitecore项目的匿名访问,sitecore,anonymous-access,Sitecore,Anonymous Access,我想知道是否有任何方法可以匿名访问某些特定的SiteCore内容项?通过Sitecore admin为项目的extranet\anonymous分配读取权限-没有帮助 [更新] 在access viewer中,我确保extranet\anonymous具有对所需项目的读取权限。 在站点定义中,我为我的站点使用extranet域: <site name="website" hostName="mytest" patch:before="site[@name='scheduler']" vir

我想知道是否有任何方法可以匿名访问某些特定的SiteCore内容项?通过Sitecore admin为项目的extranet\anonymous分配读取权限-没有帮助

[更新] 在access viewer中,我确保extranet\anonymous具有对所需项目的读取权限。 在站点定义中,我为我的站点使用extranet域:

<site name="website" hostName="mytest" patch:before="site[@name='scheduler']" virtualFolder="/" physicalFolder="/" enableAnalytics="true" rootPath="/sitecore/content/My Test" startItem="/Home" database="master" filterItems="true" domain="extranet" allowDebug="true" cacheHtml="true" htmlCacheSize="10MB" registryCacheSize="0" viewStateCacheSize="0" xslCacheSize="5MB" filteredItemsCacheSize="2MB" enablePreview="true" enableWebEdit="true" enableDebugger="true" enableWorkflow="true" disableClientData="false" loginPage="/login/Login.aspx"/>

我可以想出两个原因来解释为什么“将读取权限分配给extranet\anonymous没有帮助”:

问题A:站点的要求或架构意味着权限对解决此问题没有帮助

例如,在这种情况下,您希望在大多数情况下保护一个项目,但需要允许匿名用户在正确身份验证之前阅读该项目的摘要

在这里,您可以使用代码覆盖用于加载项目的用户上下文。最简单但最危险的方法是:

using (new Sitecore.SecurityModel.SecurityDisabler())
{
    var item = Sitecore.Context.Database.GetItem("/path/to/item");
    // further processing
}
这只会在using语句中关闭Sitecore的安全强制。因此存在危险。不要把任何真正对安全敏感的东西放在那个街区里

或者,您可以在代码块的持续时间内,使用

var user = Sitecore.Security.Accounts.User.FromName("domain\username", false); 
using (new Sitecore.Security.Accounts.UserSwitcher(scUser))
{
    var item = Sitecore.Context.Database.GetItem("/path/to/item");
    // further processing
}
这是首选的方法,因为您仍在使用安全性,对于比上下文用户拥有更多权限的帐户,这只是暂时的

问题B:权限应该是解决方案的正确答案,但在这种情况下不起作用


如果是这样的话,如果没有更多关于Sitecore安装和站点尝试做什么的详细信息,几乎不可能解决您的问题。如果这适用于您,那么您最好与Sitecore支持人员联系,以诊断用户权限未正确应用于您的站点的原因。他们将能够查看您的配置、代码和日志文件,以尝试解决根本问题。

我可以想出两个原因来解释为什么“将读取权限分配给extranet\anonymous没有帮助”:

问题A:站点的要求或架构意味着权限对解决此问题没有帮助

例如,在这种情况下,您希望在大多数情况下保护一个项目,但需要允许匿名用户在正确身份验证之前阅读该项目的摘要

在这里,您可以使用代码覆盖用于加载项目的用户上下文。最简单但最危险的方法是:

using (new Sitecore.SecurityModel.SecurityDisabler())
{
    var item = Sitecore.Context.Database.GetItem("/path/to/item");
    // further processing
}
这只会在using语句中关闭Sitecore的安全强制。因此存在危险。不要把任何真正对安全敏感的东西放在那个街区里

或者,您可以在代码块的持续时间内,使用

var user = Sitecore.Security.Accounts.User.FromName("domain\username", false); 
using (new Sitecore.Security.Accounts.UserSwitcher(scUser))
{
    var item = Sitecore.Context.Database.GetItem("/path/to/item");
    // further processing
}
这是首选的方法,因为您仍在使用安全性,对于比上下文用户拥有更多权限的帐户,这只是暂时的

问题B:权限应该是解决方案的正确答案,但在这种情况下不起作用


如果是这样的话,如果没有更多关于Sitecore安装和站点尝试做什么的详细信息,几乎不可能解决您的问题。如果这适用于您,那么您最好与Sitecore支持人员联系,以诊断用户权限未正确应用于您的站点的原因。他们将能够查看您的配置、代码和日志文件,以尝试解决根本问题。

这取决于您的站点定义在未经验证的情况下访问项目时将使用什么用户。您确定正在使用extranet\anonymous?因为可能正在使用以下用户(从最有可能到最不可能):

  • 内置\anonymous(分配给任何未经验证的访问者的虚拟用户,该访问者查看的网站没有明确分配的域)
  • extranet\anonymous(分配给查看默认网站的任何未经身份验证的访问者的用户)
  • sitecore\anonymous(访问sitecore登录页面时分配给访问者的用户)
编辑2014年5月7日


我还注意到使用了default\anonymous。文档中没有将其描述为上述用户。让我知道正在使用哪个用户。

这取决于您的站点定义,在未经身份验证的情况下访问项目时将使用哪个用户。您确定正在使用extranet\anonymous?因为可能正在使用以下用户(从最有可能到最不可能):

  • 内置\anonymous(分配给任何未经验证的访问者的虚拟用户,该访问者查看的网站没有明确分配的域)
  • extranet\anonymous(分配给查看默认网站的任何未经身份验证的访问者的用户)
  • sitecore\anonymous(访问sitecore登录页面时分配给访问者的用户)
编辑2014年5月7日


我还注意到使用了default\anonymous。文档中没有将其描述为上述用户。让我知道正在使用哪个用户。

分辨率: 从内容树中的“sitecore”元素中删除外部网/匿名拒绝读取权限

为了防止匿名访问整个站点,您只需使用“sitecore/content”元素

要允许匿名访问任何子项,请从站点域向匿名用户分配读取权限。就我而言,它是外联网/匿名的


我想知道它是bug还是特性。无论如何,我很高兴找到了解决方案。

解决方案: 从内容树中的“sitecore”元素中删除外部网/匿名拒绝读取权限

对p