gpt4 book ai didi

authentication - 如何处理部署在 Kestrel 上的 asp.net core mvc 中的 windows 身份验证弹出窗口的取消按钮?

转载 作者:行者123 更新时间:2023-12-03 08:42:59 25 4
gpt4 key购买 nike

我正在尝试在 asp.net core mvc 应用程序中实现混合身份验证窗口 + cookie。当 windows 身份验证被取消时,我想将用户重定向到可以选择 windows 或基于 cookie 的身份验证的后备页面。该应用程序将部署在 Kestrel 而不是 IIS 上。我正在使用 .net 核心 3.1。

基本上,当 http 状态代码为 401 且子状态代码为 1 或 2 时,我需要在后备页面上重定向用户。

到目前为止,我尝试使用状态代码页作为休闲方式:

在 Startup.cs 我添加

app.UseStatusCodePagesWithReExecute("/Error/Status", "?statusCode={0}");

在 ErrorController.cs 中
public IActionResult Status(int statusCode)
{
var statusCodeReExecuteFeature = HttpContext.Features.Get<IStatusCodeReExecuteFeature>();

if (statusCode == 401)
{
return RedirectToAction("Index", "Fallback");
}

var originalURL =
statusCodeReExecuteFeature.OriginalPathBase
+ statusCodeReExecuteFeature.OriginalPath
+ statusCodeReExecuteFeature.OriginalQueryString;

return Redirect(originalURL);
}

这不起作用,因为它破坏了 Windows 身份验证握手。

我还尝试实现自定义错误处理程序并检查 HttpResponse.StatusCode == 401,但错误 Controller 方法未命中可能是因为 Windows 身份验证由另一层处理..

最佳答案

我花了几天时间才几乎认为它无法完成。但最后我想通了。
我的问题是在 Identity Server 4 上执行外部身份验证时。当用户单击“取消”时,我无法捕捉到该事件。我获得了 401 状态码,用于输入 Windows 身份验证、单击“取消”以及单击“登录”。解决方案如下:
将此行放在公共(public) void Configure(IApplicationBuilder app) 中的 Startup.cs 中:

app.UseStatusCodePagesWithReExecute("/external/ErrorPage", "?statusCode={0}");
之后,只需在 Controller 中创建一个 IActionResult 函数,如下所示:
[HttpGet]
public IActionResult ErrorPage(int? statusCode = null)
{
if (statusCode.HasValue)
{
return View(new SomeViewModel() { ErrorMessage = statusCode.Value.ToString()});
}
return View();
}

关于authentication - 如何处理部署在 Kestrel 上的 asp.net core mvc 中的 windows 身份验证弹出窗口的取消按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60035884/

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