我有一个域 http://abc.com
和一个子域 http://sub.abc.com
. 我正在通过共享表单身份验证cookie在两个站点之间实现单点登录 . 这是通过让两个站点在machineKey中共享validationKey和decryptionKey来实现的 .
当用户点击子域中的页面时,我希望用户在根域中进行身份验证,并重定向回子域 . 用户当前被重定向到登录页面,但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>
3 回答
我通过在子域中的forms元素中设置查询字符串来解决这个问题:
然后在我的主网站上的auth代码中,我检查该查询字符串 . 如果它存在,我通过将我的子域附加到returnurl来构建重定向URL .
返回querystring实际上只是作为一个标志,我需要重定向到一个已知的子域,否则它只会重定向到当前域 . 这应该(理论上)阻止跨站点脚本 .
看看http://weblogs.asp.net/dfindley/archive/2007/02/06/fix-returnurl-when-sharing-forms-authentication-with-multiple-web-applications.aspx
您可以通过在查询字符串参数中而不是在cookie中传递身份验证票证来解决此问题 . This may help you
UPDATE
现在看看这个链接http://www.developer-corner.com/development/dotnet/single-sign-on-across-multiple-asp-net-applications/
UPDATE
您还可以使用FormsAuthentication.GetRedirectUrl方法