HangFire 仪表板未显示在 PROD 中
HangFire dashboard not displaying in PROD
我正在使用 HangFire 来安排作业,但是当我部署到 PROD 时,website/hangfire url 无法正常工作。我收到 系统找不到指定的文件 错误。
在本地主机上,我可以打开 URL。
我关注了这个URL:http://docs.hangfire.io/en/latest/quick-start.html
任何人都知道我错过了什么。
谢谢
Hangfire Dashboard 会公开有关后台作业的敏感信息,包括方法名称和序列化参数,并让您有机会通过执行不同的操作(重试、删除、触发等)来管理它们。因此非常重要限制对仪表板的访问。
默认情况下,为了确保安全,只允许本地请求,但是您可以通过传递您自己的 IAuthorizationFilter 接口实现来更改此设置,其 Authorize 方法用于允许或禁止请求。第一步是提供您自己的实现。
http://docs.hangfire.io/en/latest/configuration/using-dashboard.html#configuring-authorization
由于 Hangfire 仪表板暴露了有关您的作业的敏感信息,其中包括方法名称和序列化参数。用户还可以执行不同的操作,如重试、触发、删除等。因此验证对仪表板的访问权限非常重要。
默认情况下,Hangfire 只允许本地请求访问仪表板页面。为了为生产或测试或 UAT 用户提供适当的权限,请使用 hangfire 仪表板的 IDashboardAuthorizationFilter 接口添加您自己的授权实现。
http://docs.hangfire.io/en/latest/configuration/configuring-authorization.html
查看下面我的示例代码
public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter
{
private readonly string[] _roles;
public HangfireAuthorizationFilter(params string[] roles)
{
_roles = roles;
}
public bool Authorize(DashboardContext context)
{
var httpContext = ((AspNetCoreDashboardContext)context).HttpContext;
//Your authorization logic goes here.
return true; //I'am returning true for simplicity
}
}
Asp.net 核心启动 class Configure(IApplicationBuilder app, IHostingEnvironment env) 方法的变化
Configure(IApplicationBuilder app, IHostingEnvironment env){
......
app.UseHangfireServer();
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
DashboardTitle = "Sample Jobs",
Authorization = new[]
{
new HangfireAuthorizationFilter("admin")
}
});
......
}
也许回答晚了,但可能会有用。
就我而言,我有以下代码:
public class Startup
{
public void Configuration(IAppBuilder app)
{
#if !DEBUG
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new[] { new HangfireAuthFilter() }
});
#endif
}
}
}
它不适用于产品。
我意识到当我从 bin 文件夹复制应用程序 dll 时,它采用调试配置并且不会启动 hangfire。
当我通过 visual studio 发布应用程序并从发布文件夹的 bin 文件夹中复制 DLL 时,它工作正常。
我正在使用 HangFire 来安排作业,但是当我部署到 PROD 时,website/hangfire url 无法正常工作。我收到 系统找不到指定的文件 错误。
在本地主机上,我可以打开 URL。
我关注了这个URL:http://docs.hangfire.io/en/latest/quick-start.html
任何人都知道我错过了什么。
谢谢
Hangfire Dashboard 会公开有关后台作业的敏感信息,包括方法名称和序列化参数,并让您有机会通过执行不同的操作(重试、删除、触发等)来管理它们。因此非常重要限制对仪表板的访问。
默认情况下,为了确保安全,只允许本地请求,但是您可以通过传递您自己的 IAuthorizationFilter 接口实现来更改此设置,其 Authorize 方法用于允许或禁止请求。第一步是提供您自己的实现。
http://docs.hangfire.io/en/latest/configuration/using-dashboard.html#configuring-authorization
由于 Hangfire 仪表板暴露了有关您的作业的敏感信息,其中包括方法名称和序列化参数。用户还可以执行不同的操作,如重试、触发、删除等。因此验证对仪表板的访问权限非常重要。
默认情况下,Hangfire 只允许本地请求访问仪表板页面。为了为生产或测试或 UAT 用户提供适当的权限,请使用 hangfire 仪表板的 IDashboardAuthorizationFilter 接口添加您自己的授权实现。
http://docs.hangfire.io/en/latest/configuration/configuring-authorization.html
查看下面我的示例代码
public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter
{
private readonly string[] _roles;
public HangfireAuthorizationFilter(params string[] roles)
{
_roles = roles;
}
public bool Authorize(DashboardContext context)
{
var httpContext = ((AspNetCoreDashboardContext)context).HttpContext;
//Your authorization logic goes here.
return true; //I'am returning true for simplicity
}
}
Asp.net 核心启动 class Configure(IApplicationBuilder app, IHostingEnvironment env) 方法的变化
Configure(IApplicationBuilder app, IHostingEnvironment env){
......
app.UseHangfireServer();
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
DashboardTitle = "Sample Jobs",
Authorization = new[]
{
new HangfireAuthorizationFilter("admin")
}
});
......
}
也许回答晚了,但可能会有用。
就我而言,我有以下代码:
public class Startup
{
public void Configuration(IAppBuilder app)
{
#if !DEBUG
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new[] { new HangfireAuthFilter() }
});
#endif
}
}
}
它不适用于产品。 我意识到当我从 bin 文件夹复制应用程序 dll 时,它采用调试配置并且不会启动 hangfire。 当我通过 visual studio 发布应用程序并从发布文件夹的 bin 文件夹中复制 DLL 时,它工作正常。