网络“围墙花园”是如何实施的?

时间:2013-07-11 19:14:39

标签: http

我不确定我使用的术语是否正确,但这是我想知道的,

当未经授权的用户输入“http://my.original.req.com”时,该用户将被重定向到登录网站,以便可以授权该用户。此用户登录后,网页将再次重定向到此用户的原始请求“http://my.original.req.com”。

这通常如何在http协议中实现?具体来说,在用户登录后,用户如何再次重定向到“http://my.original.req.com”?该用户的原始请求网址“http://my.original.req.com”保存在哪里?两者之间发生了什么?

编辑: 我问这个的原因是因为我们没有在http服务器上实现它。我们是 在路由器上执行此操作。所以我更好奇地知道它是否有任何标准。

谢谢, 卫

2 个答案:

答案 0 :(得分:1)

它通常存储在登录页面的querystring参数中。

答案 1 :(得分: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");
    }
}