身份驗證發生在子域而不是父域時,是否可以通過子域對用戶進行身份驗證?跨子域的表單身份驗證
例如:
用戶登錄到site1.parent.com,然後我們需要把它們發送到reporting.parent.com。
即使登錄發生在子域,我是否可以向報告網站驗證它們?
到目前爲止,我所做的所有研究都有用戶先登錄到父域,然後每個子域都可以訪問身份驗證cookie。
身份驗證發生在子域而不是父域時,是否可以通過子域對用戶進行身份驗證?跨子域的表單身份驗證
例如:
用戶登錄到site1.parent.com,然後我們需要把它們發送到reporting.parent.com。
即使登錄發生在子域,我是否可以向報告網站驗證它們?
到目前爲止,我所做的所有研究都有用戶先登錄到父域,然後每個子域都可以訪問身份驗證cookie。
您可以將cookie設置爲認證時的父域,但必須明確設置它,它將默認爲您所在的完整域。
將auth cookie正確設置爲父域後,所有子域都應能夠讀取它。
是的,當然。您可能需要在某個階段推出自己的產品,但應該可行。
其中一個想法是,當您將它們重定向到邊界時,給它們一次性通行令牌,然後告訴接收子域期望它們(此用戶從此IP獲得此令牌)。
當您對用戶進行身份驗證時,請將身份驗證Cookie的域設置爲二級域名,即parent.com。每個子域都將根據請求接收父域的cookie,因此每個子域都可以進行身份驗證,因爲您將擁有共享的身份驗證cookie。
驗證碼:
System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False);
authcookie.Domain = "parent.com";
HttpResponse.AppendCookie(authcookie);
HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName,
False));
我用 「FormsAuthentication.SetAuthCookie」 設置cookie。有什麼不同? – 2017-04-18 16:14:11
作爲一個方面說明,我發現,使用這些行之有效+1,JRO的方法後,從比其他子域調用時FormsAuthenication.SignOut()方法不起作用萬維網/。 (我猜是因爲財產。域不匹配) - 要解決這個問題我用:
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
myCookie.Domain = "parent.com";
myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);
}
除了一個cookie設置到父域也需要確保所有的網站(應用程序)具有相同的validationKey和decryptionKey(),以便它們都可以識別彼此的身份驗證票證和cookie。做相當不錯的文章在這裏http://www.codeproject.com/KB/aspnet/SingleSignon.aspx
Jro的答案正常。但請務必更新webconfig表單身份驗證setting "domain"
,否則表單身份驗證登出將無法正常工作。 Here是我遇到的註銷問題。這裏的伎倆是有一個'。'作爲域的前綴,並將cookie設置爲「.parent.com」(使用Cookie檢查器)。
<authentication mode="Forms">
<forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com" name="FormAuthentication" path="/"/>
</authentication>
在這裏看到我的回答:http://stackoverflow.com/a/14781927/3661 – 2013-02-08 21:55:47