假设您有网站http://simple.com和许多子域名,例如:http://first.simple.com,http://second.simple.com,http://last.simple.com。
假设用户访问last.simple.com并通过普通的ASP .NET成员资格提供程序进行身份验证。
然后,从该网站,他们被发送到(重定向,链接,无论有效)网站http://last.simple.com,并且网站http://first.simple.com的目的是将该用户传递到其他网站作为状态isAuthenticated,以便网站http://last.simple.com不再要求所述用户的凭据。
这适用于Chrome,Mozila,Opera(最新版本),Safari,但不适用于IE(所有版本)和Opera(< v12.01)。
方案:
用户,地址(first.simple.com) - >发帖查询到服务器,json回答, 如果auth - 重定向。可能是json中的问题(需要使用'jsonp')?
的web.config
<system.web>
<authentication mode="Forms">
<forms name=".ASPXAUTH" protection="All" domain=".simple.com" enableCrossAppRedirects="true" />
</authentication>
</system.web>
SessionService
public void Authenticate(string username)
{
FormsAuthentication.SetAuthCookie(username, false);
var cookie = FormsAuthentication.GetAuthCookie(username, false);
cookie.HttpOnly = true;
cookie.Path = "/";
cookie.Domain = domain;
this.context.Response.AppendCookie(cookie);
}
Global.asax中
protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
{
const string aspSessionid = "ASP.NET_SessionId";
if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
{
var cookie = Context.Request.Cookies[aspSessionid];
if (cookie != null && Context.Session != null && !string.IsNullOrEmpty(Session.SessionID))
{
Response.Cookies.Add(new HttpCookie(aspSessionid, Session.SessionID) { Domain = domain, Path = "/", Expires = DateTime.Now.AddDays(30) });
}
}
}