Blazor 使用 Azure AD 身份验证允许匿名访问
Blazor using Azure AD authentication allowing anonymous access
我目前正在编写包含默认 AzureAD 身份验证的(服务器端)Blazor 应用程序。
这对经过身份验证的用户非常有效 - 挑战入口 (_Host.cshtml
) 文件,重定向然后在经过身份验证后返回。
我需要几个页面不需要身份验证 - 我不希望用户被质询并重定向到 Microsoft。
正确的做法是什么?我已经尝试了 AllowAnonymousAttribute
、AllowAnonymousToPage
razor pages 选项,似乎没有什么能阻止挑战。
如有任何帮助,我们将不胜感激!
下面是我的身份验证设置 (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");
});
我发现我必须做的是将以下内容添加到 _Hosts.cshtml
@using Microsoft.AspNetCore.Authorization
@attribute [AllowAnonymous]
一旦我这样做,默认情况下任何页面都不再需要此授权,然后我可以将它添加到我想要的页面。
例如,如果您想保护 Counter.razor 页面,只需在顶部添加授权属性即可:
@attribute [Authorize]
所以现在如果您尝试访问柜台页面,您将收到未授权消息。
如果您想在用户未登录时删除计数器 link,请修改 NavMenu.razor 并用 <AuthorizeView> </AuthorizeView>
包围计数器 link,如下所示:
<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 页面,它似乎会忽略它。
我目前正在编写包含默认 AzureAD 身份验证的(服务器端)Blazor 应用程序。
这对经过身份验证的用户非常有效 - 挑战入口 (_Host.cshtml
) 文件,重定向然后在经过身份验证后返回。
我需要几个页面不需要身份验证 - 我不希望用户被质询并重定向到 Microsoft。
正确的做法是什么?我已经尝试了 AllowAnonymousAttribute
、AllowAnonymousToPage
razor pages 选项,似乎没有什么能阻止挑战。
如有任何帮助,我们将不胜感激!
下面是我的身份验证设置 (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");
});
我发现我必须做的是将以下内容添加到 _Hosts.cshtml
@using Microsoft.AspNetCore.Authorization
@attribute [AllowAnonymous]
一旦我这样做,默认情况下任何页面都不再需要此授权,然后我可以将它添加到我想要的页面。
例如,如果您想保护 Counter.razor 页面,只需在顶部添加授权属性即可:
@attribute [Authorize]
所以现在如果您尝试访问柜台页面,您将收到未授权消息。
如果您想在用户未登录时删除计数器 link,请修改 NavMenu.razor 并用 <AuthorizeView> </AuthorizeView>
包围计数器 link,如下所示:
<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 页面,它似乎会忽略它。