首页 > 解决方案 > 使用 LocalRequestsOnlyAuthorizationFilter 在 Hangfire 上获取 401

问题描述

我们正在尝试将 hangfire 与 LocalRequestsOnlyAuthorizationFilter 一起使用。我们已将应用程序部署到 IIS。当尝试从部署 IIS 的同一台机器访问 hangfire 仪表板时,我们在 hangfire 仪表板 URL“/jobs”上得到 401。只要请求来自部署hangfire的同一台机器,我们在这里要做的就是允许查看仪表板。下面是我们在 startup.cs 文件上的配置

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

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

        app.UseHangfireDashboard("/jobs", new DashboardOptions()
        {
            Authorization = new[] { new LocalRequestsOnlyAuthorizationFilter() }
        });
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
            endpoints.MapHangfireDashboard();
        });
        backgroundJobs.Enqueue(() => Console.WriteLine("Hello world from Hangfire!")); 
    }

我们检查了远程和本地 ip,两者都相同。我们在这里还缺少什么吗?只是为了确保应用程序是否在 IIS 上运行,我们添加了另一个页面并且该页面工作正常。

标签: hangfire

解决方案


将您的授权更改为 AuthorizationFilters,

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

此外,从这篇文章中检查以确保正确安装了 ASP.net 并为您的应用程序池使用了集成管道

也是验证 IIS 配置的另一个好资源


推荐阅读