Blazor 服务器端 AllowAnonymousToFolder

Posted

技术标签:

【中文标题】Blazor 服务器端 AllowAnonymousToFolder【英文标题】:Blazor Server Side AllowAnonymousToFolder 【发布时间】:2021-05-28 20:37:02 【问题描述】:

我添加了 Azure AD 身份验证,因此对应用程序的所有请求都必须登录。但我想将其分开,因为我的页面有一个“公共”和“私人”文件夹。

我找到了这个https://docs.microsoft.com/en-us/aspnet/core/security/authorization/razor-pages-authorization?view=aspnetcore-5.0,这正是我所需要的,但是一旦我转到公用文件夹中的某个页面,我仍然会收到登录提示。

预期结果:/Pages/Public 文件夹中的所有页面都不会提示登录。

结果:当导航到 /Pages/Public 文件夹中的页面时,我会提示登录请求。

我在服务器端 Blazor 和 Net Core 方面相对较新,因此我很可能误解了某些内容,或者此功能不适用于 Blazor。如果是这样,那么我是否可以提示我应该看什么?

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(options =>

      Configuration.Bind("AzureAD", options);
      options.Events ??= new OpenIdConnectEvents();
      options.Events.OnTokenValidated += OnTokenValidatedFunc;
);
services.AddRazorPages(options =>

     //No error here but no effect either
     options.Conventions.AllowAnonymousToFolder("/Pages/Public");
).AddMvcOptions(options =>

     var policy = new AuthorizationPolicyBuilder()
                      .RequireAuthenticatedUser()
                      .Build();
     options.Filters.Add(new AuthorizeFilter(policy));
                
).AddMicrosoftIdentityUI();

【问题讨论】:

"...但我似乎无法让它工作.." 你能更具体一点吗?期望的行为是什么,当前的行为是什么?您收到任何错误或警告吗?你尝试了什么? @JHBonarius 编辑了我的问题。我希望不会被提示登录,允许我匿名。相反,我提示我登录。 是否启用匿名身份验证? (或意外禁用?)。您提供的是 Razor 页面还是 Razor 组件 (Blazor)?你读过this吗? 我不确定匿名身份验证,此应用程序之前未接受匿名并且总是重定向到登录。我已经读过,但它似乎专注于 AuthorizeView 来显示和隐藏组件?我想要的是: - 两个带有剃须刀组件的文件夹,一个用于匿名的文件夹,一个用于登录的文件夹。如果用户尝试在未登录的情况下访问已登录的组件,则应将其重定向到登录页面。如果我在 _Host 文件中设置 @attribute [AllowAnonymous],那么一切都将变为匿名。但这感觉更像是一种破解而不是解决方案。 【参考方案1】:

在包含所有需要身份验证的页面的文件夹中的新_Imports.razor 中使用@attribute [Authorize(Policy = "Whatever")]。这会将 Authorize 属性添加到该文件夹​​及以下文件夹中的所有页面。您将不得不删除您的全局身份验证。不过要求。

【讨论】:

我创建了一个策略并添加了属性,它运行良好。剩下的就是如何获得与以前相同的行为,而不是仅仅打印出“未授权”,我希望它重定向到 Azure 登录屏幕。如果我是正确的,那么我的示例代码中的第一个代码块是重定向的代码块,但它似乎没有使用此 Authorize 方法运行。该策略是通过 AddPolicy("IsDeveloper", policy => policy .RequireAuthenticatedUser() .Build()); 添加的 所以我认为这里的问题是,通过不使用 startup.cs 中的默认 AddAuthentication,我无法免费获得登录重定向,并且必须自己制作。我更愿意使用标准登录名,而只需要几个匿名页面。但是 Blazor 中似乎不存在 [AllowAnonymous] 属性?知道模拟这种情况的最佳实践方法吗?

以上是关于Blazor 服务器端 AllowAnonymousToFolder的主要内容,如果未能解决你的问题,请参考以下文章

如何限制 Blazor 服务器端请求大小

如何从 Blazor 服务器端应用程序中的 Razor 页面导航到 Blazor 组件?

是否可能:使用 Blazor 服务器端作为客户端应用程序

如何从服务器端 Blazor 应用程序中的 Blazor 组件调用 razor 页面而不导致页面刷新

优化服务器端 Blazor 应用程序

反向代理 404 后面的 Blazor 服务器端