If you are using .NET Core 2.0, you would need a custom implementation to comply with the new auth standards.
You need to add a middleware.
This one's provided by HangFire in their Github page/issues.
public class HangfireDashboardMiddleware
{
private readonly DashboardOptions _dashboardOptions;
private readonly JobStorage _jobStorage;
private readonly RequestDelegate _nextRequestDelegate;
private readonly RouteCollection _routeCollection;
public HangfireDashboardMiddleware(
RequestDelegate nextRequestDelegate,
JobStorage storage,
DashboardOptions options,
RouteCollection routes)
{
_nextRequestDelegate = nextRequestDelegate;
_jobStorage = storage;
_dashboardOptions = options;
_routeCollection = routes;
}
public async Task Invoke(HttpContext httpContext)
{
var aspNetCoreDashboardContext =
new AspNetCoreDashboardContext(_jobStorage, _dashboardOptions, httpContext);
var findResult = _routeCollection.FindDispatcher(httpContext.Request.Path.Value);
if (findResult == null)
{
await _nextRequestDelegate.Invoke(httpContext);
return;
}
// attempt to authenticate against default auth scheme (this will attempt to authenticate using data in request, but doesn't send challenge)
var result = await httpContext.AuthenticateAsync();
if (!httpContext.User.Identity.IsAuthenticated)
{
// request was not authenticated, send challenge and do not continue processing this request
await httpContext.ChallengeAsync();
}
if (_dashboardOptions
.Authorization
.Any(filter =>
filter.Authorize(aspNetCoreDashboardContext) == false))
{
var isAuthenticated = httpContext.User?.Identity?.IsAuthenticated;
httpContext.Response.StatusCode = isAuthenticated == true
? (int) HttpStatusCode.Forbidden
: (int) HttpStatusCode.Unauthorized;
return;
}
aspNetCoreDashboardContext.UriMatch = findResult.Item2;
await findResult.Item1.Dispatch(aspNetCoreDashboardContext);
}
}
Then in your Startup.cs
You need to add this method
private static IApplicationBuilder UseHangfireDashboardCustom(IApplicationBuilder app,string pathMatch = "/hangfire",DashboardOptions options = null,JobStorage storage = null)
{
var services = app.ApplicationServices;
storage = storage ?? services.GetRequiredService<JobStorage>();
options = options ?? services.GetService<DashboardOptions>() ?? new DashboardOptions();
var routes = app.ApplicationServices.GetRequiredService<RouteCollection>();
app.Map(new PathString(pathMatch), x =>
x.UseMiddleware<HangfireDashboardMiddleware>(storage, options, routes));
return app;
}
Finally, use the Custom Authorization
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes => routes.MapRoute(
"default",
"{controller=Home}/{action=Index}/{id?}"));
app.UseHangfireServer();
//Voila!
UseHangfireDashboardCustom(app);
}