2011-02-11 98 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工作到當前域。這應該(理論上)防止跨站點腳本。

相關問題