gpt4 book ai didi

c# - Owin:多次调用 OnApplyRedirect 并创建不正确的 RedirectUri

转载 作者:行者123 更新时间:2023-11-30 12:21:31 25 4
gpt4 key购买 nike

我在带有 owin 的应用程序中使用 CookieAuthentication 并在 OnApplyRedirect 上设置重定向 url,如下面的代码:

 app.UseCookieAuthentication(new CookieAuthenticationOptions
{
ExpireTimeSpan = TimeSpan.FromDays(30),
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/account/sign-in"),
//LogoutPath = new PathString("/account/log-out"),
ReturnUrlParameter = "returnTo",
CookieName = "BIR",
Provider = new CookieAuthenticationProvider()
{
OnValidateIdentity = SmObjectFactory.Container.GetInstance<IAppUserManager>().OnValidateIdentity(),
OnApplyRedirect = c =>
{
if (!c.Request.IsAjaxCall())
{
c.Response.Redirect(c.RedirectUri);
}
}
}
});

我的问题是 c.RedirectUri 值,我设置断点并在执行此操作后跟踪我的代码 我明白 OnApplyRedirect 调用了几次 .

在第一次调用 RedirectUri 时:

http://localhost:7537/account/sign-in?returnTo=%2Fadmin-panel

在第二次调用中 RedirectUri 是:

http://localhost:7537/account/sign-in?returnTo=%2Faccount%2Fsign-in%3FreturnTo%3D%252Fadmin-panel

还有更多...

在调用旧 url 之前添加新 url。我试图解决这个问题,在另一个和当前站点搜索和研究但没有找到答案,为什么多次调用 OnApplyRedirectStartup.cs 类中的Configuration 方法只会被调用一次。其他细节:

最佳答案

使用提供的身份验证,我能够通过在一个简单的自动生成的 OWIN 项目的 SignIn 操作上注释掉 [AllowAnonymous] 来重现该问题。

因此,您的情况很可能是由于登录操作在用于匿名访问时需要身份验证,从而导致无限循环的重定向将失败。

在以下 Controller 中,需要授权才能访问其管理面板会导致您遇到的问题。

[Authorize]
[RoutePrefix("account")]
public class AccountController : Controller {
[Route("sign-in")]
public ActionResult Signin(string returnTo) {
ViewBag.ReturnTo = returnTo;
return View(new LoginViewModel { RememberMe = true });
}

[Route("admin-panel")]
public Action AdminPanel() {
return View();
}
}

所有登录、帐户验证和密码恢复操作都应使用 [AllowAnonymous] 属性进行标记,以便在 [Authorize] Controller 内允许匿名访问

[Authorize]
[RoutePrefix("account")]
public class AccountController : Controller {
[AllowAnonymous]
[Route("sign-in")]
public ActionResult Signin(string returnTo) {
ViewBag.ReturnTo= returnTo;
return View(new LoginViewModel { RememberMe = true });
}

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
[Route("sign-in")]
public async Task<ActionResult> Signin(LoginViewModel model, string returnTo) {
//...
}

[Route("admin-panel")]
public Action AdminPanel() {
return View();
}
}

或者应移动到未标记有 [Authorize] 属性的 Controller 。

[Authorize]
public class AccountController : Controller {
[Route("account/admin-panel")]
public Action AdminPanel() {
return View();
}
}

public class AuthenticationController : Controller {
[Route("account/sign-in")]
public ActionResult Signin(string returnTo) {
ViewBag.ReturnTo= returnTo;
return View(new LoginViewModel { RememberMe = true });
}

[HttpPost]
[ValidateAntiForgeryToken]
[Route("account/sign-in")]
public async Task<ActionResult> Signin(LoginViewModel model, string returnTo) {
//...
}
}

关于c# - Owin:多次调用 OnApplyRedirect 并创建不正确的 RedirectUri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45504790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com