Hangfire Azure 授权被拒绝

Hangfire Azure authorization denied

我已经使用 Hangfire 将我的小应用程序部署到 Azure 应用程序服务。 (我已经用另一个项目完成了这个)

我正在尝试使用 Azure Active Directory 授权进行设置。我转到 Azure 门户并在应用程序服务的 authentication/authorization 设置中进行设置:打开应用程序服务身份验证,选择 Azure Active Directory 并在身份验证提供程序菜单中添加已配置(Express:现有应用程序)(就像在以前的项目)。然后我重新启动应用程序服务。

Startup.cs 包含:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddHangfire(config => config
            .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
            .UseSimpleAssemblyNameTypeSerializer()
            .UseRecommendedSerializerSettings()
            .UseMemoryStorage());

            services.AddHangfireServer();
            services.AddRazorPages();
        }

public void Configure(
            IApplicationBuilder app, 
            IWebHostEnvironment env,
            IBackgroundJobClient backgroundJobClient,
            IRecurringJobManager recurringJobs)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseRouting();
            app.UseAuthorization();

            app.UseHangfireDashboard("/jobs", new DashboardOptions()
            {
                Authorization = new[] { new HangFireAuthorizationFilter() }
            });


            app.UseHangfireServer(new BackgroundJobServerOptions { WorkerCount = Environment.ProcessorCount * 5 });


            //backgroundJobClient.Enqueue(() => Console.WriteLine("Hello Hangfire job!!"));


            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });
        }

HangFireAuthorizationFilter.cs 包含:

public class HangFireAuthorizationFilter : IDashboardAuthorizationFilter
    {
        public bool Authorize([NotNull] DashboardContext context)
        {
            //Can use this for NetCore
            return !context.GetHttpContext().User.Identity.IsAuthenticated;
        }
    }

我成功发布到 Azure 并在出现提示时使用我的 Azure 帐户登录,我收到此消息: You do not have permission to view this directory or page.

我在 Azure 应用程序中启用了登录功能,但收到此错误消息:

我到底做错了什么?我肯定错过了什么,但不知道是什么。如果我禁用 Azure 的授权,部署和应用程序本身将按预期工作。

我可以在我这边重现你的问题,我想你错过了你的 AD 应用程序中的 API 权限,请尝试以下步骤。

导航到门户中的 Azure Active Directory -> App registrations -> 使用过滤器 All applications 找到与网络应用程序对应的广告应用程序 -> API permissions - > 在 Microsoft Graph.

中添加 Delegated 权限 User.Read

然后当你使用你的AAD租户中的用户帐户登录web应用时,它会要求你同意权限User.Read,同意并登录成功后,它会正常工作。


注意: 要同意普通用户的权限,请确保 Azure Active Directory -> Enterprise applications -> User settings -> Users can consent to apps accessing company data on their behalf 设置为 Yes.

在 Azure 应用服务 settings/configs 中反复试验后,以下更改解决了我的问题:

  • 在应用程序注册的“身份验证”中添加了完整的URL无路由

  • 已从 API 应用程序注册权限中删除“Power BI”权限

  • 已授予管理员对应用程序中所有预定义权限的同意 报名

  • 将“请求未通过身份验证时采取的操作”更改为:“记录 在应用服务中使用 Azure Active Directory” “Authentication/Authorization”