【问题标题】:Blazor using Azure AD authentication allowing anonymous accessBlazor 使用 Azure AD 身份验证允许匿名访问
【发布时间】:2020-07-01 06:00:43
【问题描述】:

我目前正在编写一个包含默认 AzureAD 身份验证的(服务器端)Blazor 应用程序。

这对经过身份验证的用户非常有效 - 对入口 (_Host.cshtml) 文件提出挑战,重定向,然后在经过身份验证后返回。

我需要有几个页面需要身份验证 - 我不希望用户受到质疑并将其重定向到 Microsoft。

这样做的正确方法是什么?我已经尝试过AllowAnonymousAttribute、AllowAnonymousToPage 剃须刀页面选项,似乎没有什么能阻止挑战。

任何帮助将不胜感激!

以下是我的身份验证设置(ConfigureServices):

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
        .AddAzureAD(options => Configuration.Bind("AzureAd", options));

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

    services.AddRazorPages();
    services.AddServerSideBlazor();
    services.AddTelerikBlazor();
}

然后是配置中的相应部分:

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    endpoints.MapBlazorHub();
    endpoints.MapFallbackToPage("/_Host");
});

【问题讨论】:

标签: azure authentication azure-active-directory blazor blazor-server-side


【解决方案1】:

我发现我必须将以下内容添加到 _Hosts.cshtml

@using Microsoft.AspNetCore.Authorization
@attribute [AllowAnonymous]

一旦我这样做了,默认情况下任何页面都不再需要此授权,然后我可以将其添加到我需要它的页面中。

例如,如果您想保护 Counter.razor 页面的安全,只需在顶部添加一个 Authorize 属性:

@attribute [Authorize]

所以现在如果您尝试访问计数器页面,您将收到一条未授权消息。

如果您想在用户未登录时删除计数器链接,请修改 NavMenu.razor 并用 <AuthorizeView> </AuthorizeView> 包围计数器链接,如下所示:

<AuthorizeView>
    <li class="nav-item px-3">
        <NavLink class="nav-link" href="counter">
            <span class="oi oi-plus" aria-hidden="true"></span> Counter
        </NavLink>
    </li>
</AuthorizeView> 

理想情况下,我希望选择退出对索引页面的授权,并在默认情况下保护所有其他内容,但我找不到让它工作的方法。如果我尝试将 @attribute [AllowAnonymous] 添加到 Index.razor 页面,它似乎会忽略它。

【讨论】:

  • 感谢您的回答 @LarryDev ,我发现删除 AuthorizeFilter (在 Startup.cs 中)特别是 RequireAuthenticatedUser 方法,因为这将它设置为站点范围内的伎俩。然后只需将AuthorizeAttribute 放在每个 Razor page 上(路由中不使用组件)。这样AllowAnonymousAttribute 就不需要在 __Hosts 页面上。
猜你喜欢
  • 2018-04-30
  • 1970-01-01
  • 2014-09-22
  • 2019-09-16
  • 2021-09-20
  • 2023-04-09
  • 2021-03-23
  • 2015-12-05
  • 1970-01-01
相关资源
最近更新 更多