在 ASP.NET 6 Web App 中添加授权策略会破坏 default/scaffolded Identity returnurl

Adding Authorization Policy breaks default/scaffolded Identity returnurl in ASP.NET 6 Web App

在我的 ASP.NET 6 Web 应用程序 Program.cs.

中添加授权策略后,我遇到了返回 url 格式不正确的问题

重现问题的步骤:

  1. 使用个人帐户创建 ASP.NET 6 个 Web 应用程序。
  2. 创建 SQL 服务器数据库并更新 appsettings.json 中的连接字符串。
  3. 更新数据库以创建默认的 ASP.NET 身份表。
  4. 使用默认的 ApplicationDbContext 和 IdentityUser 搭建所有身份页面。

此时一切正常。我可以注册一个新用户并登录。

  1. 将授权策略添加到 program.cs 以要求用户登录才能访问该应用程序。
builder.Services.AddAuthorization(options => {
    options.FallbackPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    });

此时启动应用程序会被带到一个损坏的 URL:

(在 MS Edge 上) 嗯……无法访问此页面 它看起来像在 https://localhost:7094/Identity/Account/Login?ReturnUrl=%2FIdentity%2FAccount%2FLogin%3FReturnUrl%3D%252FIdentity%252FAccount%252FLogin%253FReturnUrl%253D%25252FIdentity 的网页...... .etc

url 无休止地重复,每次循环时都会添加更多“%25F”。

将 [AllowAnonymous] 添加到登录和注册页面允许我访问它们,但我仍然无法真正成功地注册新用户。注册后,点击 'Normally this would be emailed: Click here to confirm your account' link 将我带到一个同样损坏的 URL:

https://localhost:7094/Identity/Account/Login?ReturnUrl=%2FIdentity%2FAccount%2FConfirmEmail%3FuserId%3Def48b287-bac4-4b21-afbc-f060e1ba859d%26code%3DQ2ZESjhBS2tOazZqZ1IxSWl3NVdudEJhSUhLckxsY2NMZytON1JSaVlPYkRLOE50ako2THFWOXRIZ2UzVFB4VmxFZ0JUYWQ0djg2TXNLcVpyS3c2VndEcUtNdG5DdkNBdzhnak95TUQ4U25nSTltU2cvRzNzMUt5ZHgvNGd6WjhFdnlYUy85RmMzU2g0VHY3WURhOHl0TVJPay8wbGI1b0JFV3hWcEZNYkQ1S2Q5U1VuNEh6ZlZkOEIrOWFEdGxYQVBWR2hIZjVnaENLditwSjJaWUoyMHNWOHp3VzVIanJ4cnh0NEEwUTNHdjZNNlEyRC9ZdUVORmZZOXM3NVZjeWtvcHIrUT09%26returnUrl%3D%252FIdentity% 252FAccount%252F注销

这导致数据库中的 EmailConfirmed 列未设置为 True,我无法以创建的用户身份登录。

有谁知道是什么导致 url 以这种方式格式化?上面的Authorization代码是我自己加到项目中的唯一代码,其他都是default/scaffolded.

这对我有帮助。

https://andrewlock.net/setting-global-authorization-policies-using-the-defaultpolicy-and-the-fallbackpolicy-in-aspnet-core-3/

我把 [AllowAnonymous] 装饰放在:

  • AccessDenied.cshtml.cs
  • ForgotPasswordModel.cshtml.cs
  • ForgotPasswordConfirmation.cshtlm.cs
  • Login.cshtml.cs
  • Error.cshtml.cs

我认为如果你也添加它,它会对你有用 ConfirmEmailModel.cshtml.cs

我不需要注册页或 2fa 页。 目前看来,如果有人知道更好的解决方案,我会很高兴听到它。