错误或配置错误? ASP.NET Core 2.1 在访问被拒绝时触发 404 错误

Bug or misconfigured? ASP.NET Core 2.1 firing 404 error on Access Denied

我不确定我是否发现了错误,或者我是否只是以某种方式搞砸了配置。

我有一个 ASP.NET Core 2.1 Razor 网站,使用 AzureADB2C 身份验证,利用新的 'pre-packaged' 配置实用程序)。当我尝试访问我的测试用户无权访问的页面时,它 returns 一个通用的 404 页面,而不是转到预定义的 AccessDenied 页面。

查看浏览器 URL,它正在尝试前往:

https://localhost:44310/Account/AccessDenied?ReturnUrl=%2FAbout

不过我觉得应该是:

https://localhost:44310/AzureADB2C/Account/AccessDenied?ReturnUrl=%2FAbout (Note: if I manually put this in the browser, it works correctly)

当您注销时,它会将您带到:

https://localhost:44310/AzureADB2C/Account/SignedOut

有谁知道是否有控制此重定向的配置?或者这是新的 2.1 身份验证模块中的错误? (如果是这样,有什么想法可以解决它直到它被修复吗?)

我已将此作为错误报告给 MSFT,他们正在调查。但我确实找到了解决方法,以防其他人遇到同样的问题。

MSFT 站点上的问题是:https://developercommunity.visualstudio.com/content/problem/301357/microsoftaspnetcoreauthenticationazureadb2cui-acce.html

解决方法是使用重写中间件重定向调用。将以下内容放入 Startup.cs class 的 Configure 方法中即可解决问题。

        // Workaround for AccessDenied URL error in MSFT code
        RewriteOptions rewrite = new RewriteOptions().AddRedirect("^Account/AccessDenied(.*)", "AzureADB2C/Account/AccessDenied");
        app.UseRewriter(rewrite);