我不确定我使用的术语是否正确,但这是我想知道的,
当未经授权的用户输入“http://my.original.req.com”时,该用户将被重定向到登录网站,以便可以授权该用户。此用户登录后,网页将再次重定向到此用户的原始请求“http://my.original.req.com”。
这通常如何在http协议中实现?具体来说,在用户登录后,用户如何再次重定向到“http://my.original.req.com”?该用户的原始请求网址“http://my.original.req.com”保存在哪里?两者之间发生了什么?
编辑: 我问这个的原因是因为我们没有在http服务器上实现它。我们是 在路由器上执行此操作。所以我更好奇地知道它是否有任何标准。
谢谢, 卫
答案 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");
}
}