如何保护 Sitecore 中的 CM 站点?

How to secure the CM site in Sitecore?

我正在尝试锁定 CM(主)站点。用户将必须登录才能查看该站点。

下面的配置被添加到 sitecore.config。不幸的是,下面的实现仅适用于主页(例如 /)。 当匿名用户访问 /hello-world 时,他们会看到一个没有任何内容的 "white" 页面。它不会将他们定向到登录页面。

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/">
  <sitecore>
    <sites>
      <site name="website" 
              set:requireLogin="true" 
              set:domain="sitecore" 
              set:loginPage="/sitecore/login" 
              set:targetHostName="master.website.com" 
              set:scheme="http" />
    </sites>
  </sitecore>
</configuration>

访问主页会将我带到 login page 但是,如果我手动输入内部页面 URL,我会得到以下信息: white page

要使其正常工作,只需更改 "website" 配置节点的 2 个设置 - requireLoginloginPage。所以你肯定设置正确。 我以前遇到过类似的 "blank page" 问题,它与 ItemNotFoundUrl 设置的一些错误配置有关。如果 "hello-world" 页面不存在,也可能是你的情况。

你能试试这个吗:

<site name="website" virtualFolder="/" physicalFolder="/" rootPath="/sitecore/content" startItem="/hello-world" database="master" domain="extranet" allowDebug="true" cacheHtml="true" htmlCacheSize="10MB" registryCacheSize="0" viewStateCacheSize="0" xslCacheSize="5MB" filteredItemsCacheSize="2MB" enablePreview="true" enableWebEdit="true" enableDebugger="true" disableClientData="false" requireLogin="true" loginPage="/sitecore/login/Default.aspx" />

亮点:

  1. startItem : 设置为 hello-world 页面(假设这是主页项目)
  2. database : 设置为master(取决于你的测试用例,你也可以使用web db)
  3. loginPage : 重定向到 Sitecore 登录页面
  4. requireLogin : 强制登录,设置为 TRUE

经过进一步调查,并联系了 sitecore 社区,我发现 sitecore 8 update 5 (mvc) 中存在一个错误。安全检查工作不正常。

修复方法如下: 1.添加继承自SecurityCheck的管道。

public class SecurityCheck : Sitecore.Pipelines.RenderLayout.SecurityCheck
{
            private RequestBeginArgs originalArgs;

            public virtual void Process(RequestBeginArgs args)
            {
                originalArgs = args;
                Process(new RenderLayoutArgs((System.Web.UI.Page)new Sitecore.Web.UI.HtmlControls.Page(), (Item)null));
            }

            protected override bool HasAccess()
            {
                SiteContext site = Context.Site;
                if (site != null && site.RequireLogin && (!Context.User.IsAuthenticated && !this.IsLoginPageRequest()))
                {
                    originalArgs.AbortPipeline();
                    return false;
                }
                if (site == null || site.DisplayMode == DisplayMode.Normal || (Context.User.IsAuthenticated || !(PreviewManager.GetShellUser() == string.Empty)) || this.IsLoginPageRequest())
                    return true;
                originalArgs.AbortPipeline();
                return false;
            }
}

2。将此处理器添加为第一个处理器

<mvc.requestBegin>
    <!-- security check for site -->
    <processor type="Namespace.SecurityCheck, Assembly"/>
  </mvc.requestBegin>