如何将未经身份验证的 Blazor Azure AD 用户重定向到与经过身份验证的用户不同的页面?

How can I redirect unauthenticated Blazor Azure AD users to a different page than authenticated users?

我正在使用 Visual Studio 2019 中包含的 Blazor Server 模板。

在使用本地身份验证的模板应用程序中,当我查看未经身份验证的页面时,AuthorizeView 标签按预期工作,导航栏上的日志 in/out 按钮根据这些标签动态显示。我可以作为客人查看柜台和天气预报页面。

在使用 Azure AD 身份验证的模板应用程序中,每当我尝试查看未经身份验证的页面时,我都会被重定向到 Microsoft 登录提示。我仍然可以使用 AuthorizeView 标签在导航栏中动态显示组件,但我希望能够以访客身份查看计数器和天气预报页面,而不会被重定向。

有什么办法可以实现吗?我可能在 App.razor 中遗漏了什么吗?

编辑:

如果我使用导航栏注销 link,然后使用浏览器返回,我可以在未经授权的情况下查看页面。但是当我刷新页面时,我被送回 https://login.microsoftonline.com/。是什么原因造成的?我想在不被重定向的情况下查看未经授权的主页。

您看到的行为是设计使然。

要更改它,您可以在 Startup.Configure 中进行此更改:

services.AddControllersWithViews(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    //options.Filters.Add(new AuthorizeFilter(policy));
});

(当然,如果您想保持这种方式,则将此代码减少到 services.AddControllersWithViews();。)

进行此更改后,您将不得不使用 @attribute [Authorize]<AuthorizeView> 阻止私人页面,并且不会自动重定向到登录页面。