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



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

这对经过身份验证的用户来说效果很好——对入口(_Host.cshtml(文件进行质询,重定向,然后在经过身份验证后返回。

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

正确的方法是什么?我已经尝试了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();
}

然后是配置中的适当部分:

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并用<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页面,它似乎会忽略它。

首先,您需要在所有页面上禁用身份验证。这可以通过在";Program.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>

这将允许您保留应用程序中所有组件和功能的完整功能。

我不建议在您的"_主机.cshtml;文件,因为这会导致按钮和组件的功能更长/正确显示

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

希望这能有所帮助。我正在使用带有dotnet6的Blazor服务器。

相关内容

  • 没有找到相关文章

最新更新