Я использую 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() }
});
}