Blazor 使用 Azure AD 身份验证允许匿名访问
Posted
技术标签:
【中文标题】Blazor 使用 Azure AD 身份验证允许匿名访问【英文标题】:Blazor using Azure AD authentication allowing anonymous access 【发布时间】: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 AD 的预期行为。 docs.microsoft.com/en-us/azure/app-service/… 【参考方案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 页面上。以上是关于Blazor 使用 Azure AD 身份验证允许匿名访问的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Azure AD B2C 保护 Blazor Wasm 应用访问的 Azure 函数?
具有 Azure AD 身份验证的 Azure 函数 - 允许的令牌受众不适用于 Microsoft Graph
如何在 ASP.NET Core 3 上同时使用 Azure AD 身份验证和身份?
在 Blazor 中同时使用 ASP.Net Core Identity 和 Azure 身份验证
使用身份验证托管的 Blazor Wasm 上出现 Azure 500 错误
Microsoft Graph API - Blazor Server App .NET 5.0 使用 Azure 身份验证,MsalUiRequiredException 因用户质询而引发