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

juzqafwq  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(175)

我目前正在编写一个(服务器端)Blazor应用程序,其中包括默认的AzureAD身份验证。
这对于经过身份验证的用户很有效--在入口(_Host.cshtml)文件上进行挑战,重定向,然后在经过身份验证后返回。
我需要有一对夫妇的网页 * 不 * 需要身份验证-我不希望用户受到挑战,并重定向到微软。
正确的方法是什么?我已经尝试了AllowAnonymousAttributeAllowAnonymousToPage剃刀页面选项,似乎没有什么可以阻止挑战。
任何帮助将不胜感激!
下面是我的身份验证设置(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();
}

然后是Configure中的相应部分:

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

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

xn1cxnb41#

我发现我必须做的是将以下内容添加到_Hosts。cshtml

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

一旦我这样做了,默认情况下,任何页面都不再需要此授权,然后我可以将其添加到我想要的页面中。
例如,如果您想保护计数器。剃刀页面只需要在顶部添加一个Authorize属性:

@attribute [Authorize]

所以现在如果你试图访问计数器页面,你会得到一个未授权的消息。
如果要在用户未登录时删除计数器链接,请修改导航菜单。剃刀和周围的计数器链接与<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]添加到索引中。她似乎忽略了它。

gdrx4gfi

gdrx4gfi2#

首先,您需要在所有页面上禁用身份验证。这可以通过在“程序”中注解回退策略来完成。cs”。

builder.Services.AddAuthorization(options => 
{
    // By default, all incoming requests will be authorized according to the default policy
    //options.FallbackPolicy = options.DefaultPolicy;
});

然后,在您的个人剃刀页面上,添加以下代码:

<AuthorizeView>
    <Authorized>
        @*code for authenticated users here*@
        I am logged in
    </Authorized>
    <NotAuthorized>
        @*code for unauthenticated users here*@
        Please log in
    </NotAuthorized>
</AuthorizeView>

这将允许您保留应用中所有组件和功能的完整功能。
我不建议将以下内容添加到您的“_Host”。cshtml”文件,因为这会导致按钮和组件更长时间地正常工作/显示

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

希望这能帮上忙。我使用Blazor服务器与dotnet 6。

相关问题