2011-02-11 65 views
14

我有一个域http://abc.com和一个子域http://sub.abc.com。我正在通过共享表单身份验证cookie在两个站点之间实施单点登录。这是通过让两个站点在machineKey中共享validationKey和decryptionKey来实现的。表单身份验证ReturnUrl和子域用于单一登录

当用户点击子域中的页面时,我希望用户在根域中进行身份验证并将其重定向回子域。用户目前被重定向到登录页面,但ReturnUrl想要重定向到根站点。

例如,目前:http://abc.com/login.aspx?ReturnUrl=%2fsecure%2fdefault.aspx

,但我想:http://abc.com/login.aspx?ReturnUrl=http:%2f%2fsub.abc.com%2fsecure%2fdefault.aspx

如何才能实现这一目标?

在我的子域的web.config我可以这样来配置目前AUTH:

<authentication mode="Forms"> 
    <forms name=".ASPNET" loginUrl="http://abc.com/login.aspx" protection="All" timeout="1440" path="/" domain="abc.com" enableCrossAppRedirects="true" /> 
</authentication> 
+0

如果你想让abc.com的cookies可以被sub.abc.com访问,我相信你需要将域设置为“.abc.com”而不是“abc.com”。不知道关于returnurl的事情。您可能必须通过检查UrlReferer手动执行此操作。 – 2011-02-11 17:38:20

+0

你不需要像域名* .abc.com这样的通配符吗? – Gallen 2011-02-11 17:42:44

+0

@Daniel Schaffer,我需要在两个站点的配置中设置“.abc.com”吗?或者只是子域的? – LordHits 2011-02-11 17:43:25

回答

14

看看我解决了这个通过在我的表单中设置查询字符串ubdomain:

<authentication mode="Forms"> 
    <forms name=".ASPNET" loginUrl="http://abc.com/login.aspx?returnsite=sub" protection="All" timeout="1440" path="/" domain="abc.com" enableCrossAppRedirects="true" /> 
</authentication> 

然后在我的主要网站我的授权码,我检查该查询字符串。如果存在,我通过将我的子域添加到returnurl来构建重定向url。

returnite querystring实际上只是作为一个标志,我需要重定向到一个已知的子域名,否则它将只与redirecturl工作到当前域。这应该(理论上)防止跨站点脚本。

相关问题