Blazor使用Azure AD身份验证,允许匿名访问

Blazor使用Azure AD身份验证,允许匿名访问,azure,authentication,azure-active-directory,blazor,blazor-server-side,Azure,Authentication,Azure Active Directory,Blazor,Blazor Server Side,我目前正在编写一个服务器端Blazor应用程序,其中包括默认的AzureAD身份验证 这对于经过身份验证的用户来说非常有效-对入口_Host.cshtml文件进行挑战,在经过身份验证后重定向,然后返回 我需要有几个不需要身份验证的页面-我不希望用户受到质疑并重定向到Microsoft 正确的方法是什么?我已经尝试过AllowAnyMousAttribute,AllowAnyMousTopage razor页面选项,似乎没有什么可以阻止这个挑战 任何帮助都将不胜感激 以下是我的身份验证配置服务设置

我目前正在编写一个服务器端Blazor应用程序,其中包括默认的AzureAD身份验证

这对于经过身份验证的用户来说非常有效-对入口_Host.cshtml文件进行挑战,在经过身份验证后重定向,然后返回

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

正确的方法是什么?我已经尝试过AllowAnyMousAttribute,AllowAnyMousTopage razor页面选项,似乎没有什么可以阻止这个挑战

任何帮助都将不胜感激

以下是我的身份验证配置服务设置:

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");
});

我发现我要做的是将以下内容添加到_Hosts.cshtml

@using Microsoft.AspNetCore.Authorization
@attribute [AllowAnonymous]
一旦我这样做了,在默认情况下,任何页面上都不再需要此授权,然后我可以将其添加到需要授权的页面中

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

@attribute [Authorize]
因此,现在如果您试图访问计数器页面,您将收到一条未经授权的消息

如果您想在用户未登录时删除计数器链接,请修改NavMenu.razor,并将计数器链接用as so环绕:


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

这是Azure广告的预期行为。感谢您的回答@LarryDev,我发现删除Startup.cs中的AuthorizeFilter特别是RequireAuthenticatedUser方法,因为这会在站点范围内设置它。然后简单地将authorized属性放在每个Razor页面上,在路由中不使用组件。这样,AllowAnonymous属性在u主机页面上就不需要了。
<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>