-2

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

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

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

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

谢谢,魏

4

2 回答 2

1

这通常存储在登录页面的查询字符串参数中。

于 2013-07-11T19:16:07.627 回答
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");
    }
}
于 2013-07-11T19:18:37.207 回答