2013-07-11 38 views
-2

我不知道我現在用的術語是正確的,但是這是我想知道,web「圍牆花園」如何實施?

當「http://my.original.req.com」未經授權的用戶類型,該用戶將被重定向到登錄網站,使該用戶可以被授權。該用戶登錄後,網頁將再次重定向到該用戶的原始請求「http://my.original.req.com」。

這通常在http協議中實現嗎?具體來說,在用戶登錄後,用戶又如何重定向到「http://my.original.req.com」?該用戶的原始請求URL「http://my.original.req.com」保留在哪裏?發生了什麼?

編輯: 我問這個的原因是因爲我們沒有在http服務器上實現它。我們是 在路由器上這樣做。所以我更想知道是否有任何標準。

感謝, 衛

+0

[WS-Federation](http://en.wikipedia.org/wiki/WS-Federation)也許? – rene

+0

人,當你投票時,給他們一個理由。所以他們從中吸取教訓。 – iraSenthil

+0

可能是更好的修復程序員.stackexchange.com –

回答

1

這通常存儲在登錄頁面的查詢字符串參數。

+0

謝謝,這是否有一個標準? – wei

+0

否;這很明顯。 – SLaks

0

這取決於框架。例如,在ASP.NET MVC中,當框架檢測到用戶正在嘗試訪問受保護資源時,它將用戶重定向到具有受保護資源URL的登錄頁面作爲查詢字符串參數。

成功驗證後,它將查詢字符串中的URL並將其重定向到那裏。

編輯 在重定向之前檢查重定向URL總是一個好主意。 ASP.NET MVC確保返回URL是本地URL。這裏是如何在ASP.NET MVC中實現的。

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     // Validate the user password 
     if (await Secrets.Validate(model.UserName, model.Password)) 
     { 
      string userId = await Logins.GetUserId(IdentityConfig.LocalLoginProvider, model.UserName); 
      await SignIn(userId, model.RememberMe); 
      return RedirectToLocal(returnUrl); 
     } 
    } 

    // If we got this far, something failed, redisplay form 
    ModelState.AddModelError(String.Empty, "The user name or password provided is incorrect."); 
    return View(model); 
} 

private ActionResult RedirectToLocal(string returnUrl) 
{ 
    if (Url.IsLocalUrl(returnUrl)) 
    { 
     return Redirect(returnUrl); 
    } 
    else 
    { 
     return RedirectToAction("Index", "Home"); 
    } 
}