Sitecore доступ к редактору страниц с пользователем из другого домена

Я пытаюсь получить доступ к редактору страниц веб-сайта внутри моего решения, когда вошел в PE другого веб-сайта в том же решении Sitecore. Я делаю это путем написания URL-адреса сайта, на который я пытаюсь попасть, и затем "/? Sc_mode = edit". Моя проблема в том, что я перенаправлен на страницу входа в Sitecore. Два сайта имеют разные домены безопасности. Это начало происходить только после обновления нашего решения с Sitecore 6.5 до Sitecore версии 7.1. Это изменение в поведении Sitecore или есть какие-то настройки, которые я игнорирую, чтобы разрешить такое поведение? Я хотел бы получить доступ к PE другого сайта без повторной аутентификации.

Обновить

Для ясности я добавляю больше подробностей о конкретной функциональности, которую пытаюсь исправить: у нас есть пользовательская строка состояния в PE нашего веб-сайта, которая позволяет пользователю выбрать другой сайт из решения и перейти к его PE. Код для достижения этого реализован в файле макета в /sitecore/admin, который называется AutoLogin.aspx.
Каждый раз, когда пользователь выбирает другую опцию из выпадающего селектора, он перенаправляется через JavaScript на скрипт AutoLogin в выбранном им домене. Вот код для AutoLogin:

<%@ Page Language="C#" AutoEventWireup="true" %>

<%@ Import Namespace="Sitecore" %>
<%@ Import Namespace="Sitecore.Data" %>
<%@ Import Namespace="Sitecore.Data.Items" %>
<%@ Import Namespace="Sitecore.Data.Fields" %>
<%@ Import Namespace="Sitecore.Globalization" %>
<%@ Import Namespace="Sitecore.Configuration" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Auto Login</title>
<script runat="server" type="text/C#">

    protected void Page_Load(object sender, EventArgs e)
    {
        var user=HttpContext.Current.Server.UrlDecode(Request["user"]);
        Sitecore.Web.Authentication.DomainAccessGuard.Kick(Session.SessionID);
        if (Sitecore.Security.Authentication.AuthenticationManager.Login(user))
        {
            Response.Redirect("/sitecore/shell/applications/webedit.aspx");
        }
        else
        {
            Response.Write("Invalid username.");
        }   
    }

</script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        Auto login in Page Editor
    </div> 
    </form>
</body>
</html>

Сценарий AutoLogin удаляет пользователя из сеанса и пытается зарегистрировать его в новом домене. Это кажется звучащим в теории, но это не работает на практике. По какой-то причине после удара пользователя (и перед повторным входом в систему) переменной Sitecore.Context.User.Name по-прежнему присваивается имя пользователя, которое было зарегистрировано до вызова команды Kick.

1 ответ

Решение

Аутентификация пользователя Sitecore CMS зависит от файлов cookie клиента. Браузер связывает куки с именами хостов. Если пользователь CMS аутентифицируется с помощью cms.domain.tld, если вы не предпримете шаги, чтобы связать куки-файл аутентификации с доменом (domain.tld) ​​вместо субдомена (cms.domain.tld), браузер не будет отправлять куки-файл по HTTP запросы для domain.tld или других поддоменов, таких как en.domain.tld и mobile.domain.tld.

Кроме того, когда пользователь вызывает команду, которая открывает новые окна браузера для предварительного просмотра или редактора страниц, Sitecore использует текущее имя хоста, то есть имя хоста, с которым пользователь аутентифицировался (cms.domain.tld). Это может быть полезно для файлов cookie аутентификации, но вам может потребоваться настроить управляемые сайты в среде CMS, чтобы использовать пути для разрешения сайтов вместо использования имен хостов. Вы можете внедрить процессор в конвейер httpRequestBegin, чтобы переопределить SiteResolver по умолчанию, например, чтобы определить сайт контекста по пути в запрошенном URL, а не по имени хоста. Такое решение могло бы выполнить итерации управляемых сайтов, чтобы определить, какой из них имеет путь, соответствующий пути запрашиваемого элемента, возможно, на основе существующей логики, которая применяет параметр Rendering.SiteResolving. Такие усилия не относятся к файлам cookie и именам хостов и поэтому выходят за рамки этого поста. Если кто-то запрашивает такой пример такого подхода, а может, даже если никто этого не делает, я могу попытаться реализовать что-то.

Я знаю, что куки также в 6.6 является зависимым доменом. На Sitecore 6.5 точно не знаю как было.

Вы можете найти больше здесь:

Другие вопросы по тегам