Авторизация Hangfire и IDashboardAuthorizationFilter с IdentityServer 3 - PullRequest
0 голосов
/ 28 апреля 2020

Я использую Identity Server 3 для аутентификации с несколькими веб-клиентами и одним API. Внутри проекта API (MVC,. NET Framework 4.8) у меня есть сервер фоновых заданий Hangfire, для которого я предоставляю панель мониторинга. Авторизация выполняется в пользовательской реализации IDashboardAuthorizationFilter, но я не могу понять, вошел ли пользователь в какой-либо из моих клиентов (не говоря уже об аутентификации для использования API) изнутри этой реализации фильтра. Очевидно (из документов Hangfire) я должен быть в состоянии сделать что-то вроде этого:

public class MyAuthorizationFilter : IDashboardAuthorizationFilter
{ 
    public bool Authorize(DashboardContext context)
    { 
        var owinDictionary = context.GetOwinEnvironment();
        var owinContext = new OwinContext(owinDictionary);
        var isauthed = owinContext.Authentication.User.Identity.IsAuthenticated; 
        return isauthed;
     }
}

, но owinContext.Authentication.User.Identity имеет значение null. Как я могу получить кредиты пользователей для проверки их доступа (если они вошли в систему через Id Server) или, в более общем случае, есть ли лучший способ сделать это, которого мне не хватает? Метод конфигурации в файле startup.cs выглядит следующим образом (несколько сокращен):

public void Configuration(IAppBuilder app) 
 {
        ...(container IoC stuff)… 
   Hangfire.GlobalConfiguration.Configuration.UseActivator(new WindsorJobActivator(hangfireContainer.Kernel)); 
   app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions 
   app.UseClaimsTransformation(TransformClaims); 
   app.UseResourceAuthorization(new CommonWeb.AuthorizationManager()); 
   var config = new HttpConfiguration();
   ...(webapi config stuff)...

   app.UseWebApi(config); 
   app.UseHangfireAspNet(GetHangfireServers); 
   app.UseHangfireDashboard("/hangfire", new DashboardOptions
   {
     Authorization = new[] { new MyAuthorizationFilter() }
   });
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...