我正在尝试访问我的解决方案中的网站的页面编辑器,同时登录到同一Sitecore解决方案中的另一个网站的PE。我是通过编写我想要访问的网站的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命令之前登录的用户名。
答案 0 :(得分:1)
Sitecore CMS用户身份验证取决于客户端Cookie。浏览器将cookie与主机名相关联。如果CMS用户对cms.domain.tld进行身份验证,除非您采取措施将身份验证cookie与域(domain.tld)而不是子域(cms.domain.tld)相关联,否则浏览器将不会在HTTP中发送cookie请求domain.tld或其他子域名,例如en.domain.tld和mobile.domain.tld。
此外,当用户调用为预览或页面编辑器打开新浏览器窗口的命令时,Sitecore将使用当前主机名,该主机名是用户进行身份验证的主机名(cms.domain.tld)。这可能适用于身份验证Cookie,但您可能需要在CMS环境中配置托管站点以使用路径进行站点解析而不是使用主机名。您可以在httpRequestBegin管道中实现处理器以覆盖默认的SiteResolver,例如,从请求的URL中的路径而不是主机名确定上下文站点。这样的解决方案可以迭代托管站点以确定哪个路径与所请求项的路径匹配,可能基于应用Rendering.SiteResolving设置的现有逻辑。这样的努力不是特定于cookie和主机名,因此超出了本文的范围。如果有人要求这种方法的这样一个例子,即使没有人这样做,我可能会尝试实现一些东西。
我知道6.6中的cookie也是域dependendat。在Sitecore 6.5上,我不确切知道它是怎么回事。
您可以找到更多here: