首页 > 解决方案 > .Net Core Web API 项目中的 Hangfire 仪表板

问题描述

我们有一个 .Net Core 2.0 Web API 项目。我在那里添加了hangfire。我们项目中没有任何网页,我使用 JWT 进行授权。所以我无法使用 Authorize(DashboardContext context) 对 hangfire 进行授权。有什么方法可以在 url 上传递某种 API 密钥来授权用户使用仪表板?

谢谢

标签: asp.net-corehangfire

解决方案


实现 IAuthorizationDashboardFilter 类。在这里试试这个帖子。您需要在每个请求中传递 JWT 令牌,尝试将令牌存储在 cookie 中或作为查询字符串参数。然后你可以从请求上下文中提取它并决定用户是否被授权

public class MyAuthorizationFilter : IDashboardAuthorizationFilter
{
     public bool Authorize(DashboardContext context)
     {
       var httpContext = context.GetHttpContext();
       var token = context.Request.Cookies["access-token"];
       // check token validity and set authentication accordingly. 
       return httpContext.User.Identity.IsAuthenticated;
   }
}

在您使用的任何身份验证方法之后,像这样在您的 OWIN 管道中注册过滤器。然后登录的用户声明将在过滤器中可用

public void Configuration(IAppBuilder app)
{
    app.UseCookieAuthentication(...); // Authentication - first
    app.UseHangfireDashboard("/hangfire", new DashboardOptions
    {
         Authorization = new [] { new MyAuthorizationFilter() }
    });       // Hangfire - last
}

推荐阅读