在客户端 Blazor 应用程序的页面中使用 [Authorize] 属性时的授权问题

Posted

技术标签:

【中文标题】在客户端 Blazor 应用程序的页面中使用 [Authorize] 属性时的授权问题【英文标题】:Authorization issue when use [Authorize] attribute in page in client blazor app 【发布时间】:2020-01-06 13:45:31 【问题描述】:

当我使用时

@attribute [Authorize]

在 blazor 客户端应用程序的剃须刀页面上,它给了我这个错误

System.InvalidOperationException:无法为属性提供值 类型上的“AuthorizationPolicyProvider” 'Microsoft.AspNetCore.Components.PageDisplay+AuthorizeViewWithSuppliedData'。 没有注册类型的服务 'Microsoft.AspNetCore.Authorization.IAuthorizationPolicyProvider'

我为客户端设置了身份验证并使用自定义AuthenticationStateProvider,如下所示

 public class Startup
    
        public void ConfigureServices(IServiceCollection services)
        
            services.AddScoped<AuthenticationStateProvider, ApiAuthenticationStateProvider>();
            services.AddSingleton<AuthService, AuthService>();
            services.AddBlazoredLocalStorage();

        

        public void Configure(IComponentsApplicationBuilder app)
        
            app.AddComponent<App>("app");
        
    

有关此问题的任何帮助

【问题讨论】:

【参考方案1】:

我只需要添加services.AddAuthorizationCore();

感谢 KodiakMx

    public void ConfigureServices(IServiceCollection services)
    
        services.AddBlazoredLocalStorage();
        services.AddAuthorizationCore();
        services.AddScoped<AuthenticationStateProvider, ApiAuthenticationStateProvider>();
    

【讨论】:

很高兴听到您找到了解决方案。 有趣的事情:我也必须在客户端添加它(即使在我的情况下它是一个服务器端应用程序并且它已经在服务器端启动时添加了?!)。 【参考方案2】:

您可能需要将app.UseAuthentication(); 添加到Startup 类中的Configure 方法中。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    if (env.IsDevelopment())
    
        app.UseDeveloperExceptionPage();
    
    else
    
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseAuthentication();
    app.UseSession();
    app.UseMvc(routes =>
    
        routes.MapRoute(
           name: "default",
           template: "controller=Home/action=Index/id?");
    );

【讨论】:

这是一个客户端应用而不是服务器应用 感谢我添加了 services.AddAuthorizationCore();它正在工作 @ShinichiKudo 感谢上帝的评论...这些家伙一直提到services.AddAuthorizationCore() 让我觉得他们在谈论 Sever 应用程序...因为默认模板的名称有很大不同...

以上是关于在客户端 Blazor 应用程序的页面中使用 [Authorize] 属性时的授权问题的主要内容,如果未能解决你的问题,请参考以下文章

Razor 页面与服务器端 Blazor

为 Blazor WebAssembly 中的所有 blazor 页面实例化一个对象?

在Blazor 中自定义权限验证

参数更新后 Blazor 页面未重新呈现

在刷新页面之前,Blazor Web Assembly (wasm) 不会使客户端 cookie 过期

如何使用 blazor 创建 cookie 客户端