2012-01-05 202 views
2

我有一個VS 2011解決方案文件,其中包含兩個項目,每個項目都是Web應用程序的文件。一個是舊版本的應用程序,另一個是新版本。當用戶登錄舊版本時,根據其成員身份,他們可能會被重定向到新版本。當他們登陸新網站時,他們不需要通過認證,而是直接進入應用內的頁面。response.redirect從一個asp.net網絡應用程序到另一個

爲了解決這個問題,我使用了舊應用程序中的response.redirect以及querystring來指示用戶已經過驗證。

在舊版本的代碼:

Response.Redirect(sURL + "?Auth=" + sAuth, false); 

我檢查了在新的應用程序的login.aspx.cs的Page_Load事件的查詢字符串(類似於「如果查詢字符串身份驗證= true,則繼續下一個頁」)。但是,我仍然可以看到登錄頁面。

代碼對新的應用的Page_Load事件:

if (Page.IsCrossPagePostBack) 
{ 
    string sAuthenticate = Request.QueryString.Get("Auth").ToString(); 
      if (sAuthenticate == "1") 
      { 
       ByPassAuthentication(); 
      } 
} 

我怎麼能跳過登錄頁?

+1

首先,查詢字符串不是安全的身份驗證令牌。您是否使用FormsAuthentication功能構建?還是你使用完全自定義的身份驗證? – MatthewMartin 2012-01-05 21:13:36

+0

因此,如果我只需鍵入第二個應用程序url並使用查詢字符串「Auth = 1」,我可以訪問該網站...爲什麼使用身份驗證呢? – Chandu 2012-01-05 21:15:36

+0

@Cyber​​nate這就是我在做什麼 – user1111955 2012-01-05 21:16:45

回答

0

您可以嘗試檢查新頁面上的「IsCrossPagePostBack」屬性..然後您會知道回發是否是重定向。

+0

我試圖在新版本的page_load上使用此屬性,但沒有運氣......該頁面繼續顯示登錄屏幕 – user1111955 2012-01-05 21:30:01

3

假設這是一個FormsAuthentication網站,ASP.Net會自動將用戶返回到登錄頁面,因爲他們還沒有登錄到FormsAuthentication。

因此,您至少還必須傳遞用戶的登錄名。

由於您在查詢字符串中傳遞此信息,因此必須非常小心以確保只有您的response.redirect作爲有效請求處理。您不希望任何用戶能夠通過確定查詢字符串參數是什麼並以公司首席執行官身份登錄來登錄。

我們通過加密用戶名和當前時間的組合,然後在接收端解密並比較時間戳。如果超出容忍範圍(比如2分鐘),我們拒絕登錄請求。

0

一旦你進入'新'網站,你需要認證用戶。使用.NET窗體身份驗證假設你的,你可能設置有這樣的代碼的驗證cookie,

FormsAuthentication.SetAuthCookie(userLogin, true); 

當你做到這一點,爲用戶創建一個Cookie,用於後續請求該站點時被創建。在你的情況下,'舊'網站。所以,你需要創建一個新的auth cookie,或者共享auth cookie,它有一些細微差別,並且可能很麻煩。

1

也許單點登錄將幫助你,看看我的問題,並在這裏回答。

Single Sign On

相關問題