-
-
Save ydang204/1803d73aabac40e872a550d75fddc620 to your computer and use it in GitHub Desktop.
Hangfire dashboard authorization filter using basic authentication and relying on browser support to allow user to input username and password.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Threading.Tasks; | |
using Hangfire.Annotations; | |
using Hangfire.Dashboard; | |
using Microsoft.AspNetCore.Http; | |
namespace MyApp.ScheduledTask | |
{ | |
public class HFDashboardAuthFilter : Hangfire.Dashboard.IDashboardAuthorizationFilter | |
{ | |
public bool Authorize([NotNull] DashboardContext context) | |
{ | |
var httpContext = context.GetHttpContext(); | |
var header = httpContext.Request.Headers["Authorization"]; | |
if (string.IsNullOrWhiteSpace(header)) | |
{ | |
SetChallengeResponse(httpContext); | |
return false; | |
} | |
var authValues = System.Net.Http.Headers.AuthenticationHeaderValue.Parse(header); | |
if (!"Basic".Equals(authValues.Scheme, StringComparison.InvariantCultureIgnoreCase)) | |
{ | |
SetChallengeResponse(httpContext); | |
return false; | |
} | |
var parameter = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(authValues.Parameter)); | |
var parts = parameter.Split(':'); | |
if (parts.Length < 2) | |
{ | |
SetChallengeResponse(httpContext); | |
return false; | |
} | |
var username = parts[0]; | |
var password = parts[1]; | |
if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password)) | |
{ | |
SetChallengeResponse(httpContext); | |
return false; | |
} | |
if (username == "johndoe" && password == "123") | |
{ | |
return true; | |
} | |
SetChallengeResponse(httpContext); | |
return false; | |
} | |
private void SetChallengeResponse(HttpContext httpContext) | |
{ | |
httpContext.Response.StatusCode = 401; | |
httpContext.Response.Headers.Append("WWW-Authenticate", "Basic realm=\"Hangfire Dashboard\""); | |
httpContext.Response.WriteAsync("Authentication is required."); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment