AspNet Core 2.2 Windows身份验证-浏览器不断提示输入用户名和密码

时间:2019-03-13 20:27:12

标签: c# asp.net-core windows-authentication asp.net-authorization

启用窗口身份验证,禁用匿名。当用户进入网站时,我检查他们是否是该网站的用户。如果不是,我想将它们视为未授权。但是,Chrome会继续提示他们输入用户名和密码,而不是将其发送到错误页面。永远不要提示用户输入用户名/密码,因为自动Windows身份验证已启用而匿名功能已关闭。

控制器:

public async Task<IActionResult> Login()
        {

            if (await IsValidUser())
            { 
                return RedirectToAction("Index");
            }
            else
            {
                return new UnauthorizedResult();
            }
        }

启动

app.UseStatusCodePages(async context =>
            {
                var response = context.HttpContext.Response;

                await context.HttpContext.Response.WriteAsync(
                    "Status code page, status code: " +
                    context.HttpContext.Response.StatusCode);

                response.Redirect("~/Account/AccessDenied");

            });

2 个答案:

答案 0 :(得分:0)

即使您定位的是Chrome浏览器,互联网安全设置仍然有效。关于您的问题,您的代码似乎没有任何问题(是否有问题,顺便说一句?)。请查阅this link并了解它并不能告诉您该更改可能带来的后果。这更适合于SuperUser,而不是堆栈溢出。

答案 1 :(得分:0)

第一个问题是.net核心应用程序中是否对用户进行了AD身份验证。如果未通过身份验证(凭据错误), IMO提示是浏览器行为,当启用窗口身份验证,禁用匿名时,此身份验证在到达您的应用程序代码之前由Web服务器进行,​​因此IIS在将请求传递给ASP.NET之前先进行身份验证。该请求将永远不会到达错误页面。

解决方法可能是对AD Membership Providers使用Forms Authentication。下面的线程提供了代码示例,但是我还没有测试:

.net Core Authentication

如果用户已通过身份验证并且要进行授权,则可以单击here以获得代码示例,当然,如果授权失败,也可以将用户重定向到错误页面。