Авторизация панели мониторинга (размещена как служба Windows)

У меня есть экземпляр Hangfire, размещенный в службе Windows с использованием Topshelf:

static void Main()
{
    HostFactory.Run(x =>
    {
        x.Service<Application>(s =>
        {
            s.ConstructUsing(name => new Application());
            s.WhenStarted(tc => tc.Start());
            s.WhenStopped(tc => tc.Stop());
        });
        x.RunAsLocalSystem();

        x.SetDescription("Hangfire Windows Service Sample");
        x.SetDisplayName("Hangfire Windows Service Sample");
        x.SetServiceName("hangfire-sample");
    });
}

private class Application
{
    private IDisposable host;

    public void Start()
    {
        host = WebApp.Start<Startup>("http://localhost:12345");

        Console.WriteLine();
        Console.WriteLine("Hangfire Server started.");
        Console.WriteLine("Dashboard is available at {0}/hangfire", configSettings.Jobs.EndPoint);
        Console.WriteLine();
    }

    public void Stop()
    {
        host.Dispose();
    }
}

Мой класс StartUp довольно прост:

public void Configuration(IAppBuilder app)
{
    GlobalConfiguration.Configuration.UseSqlServerStorage(
        "DefaultConnection",
        new SqlServerStorageOptions {QueuePollInterval = TimeSpan.FromMinutes(1)});    

    app.UseHangfireDashboard("/hangfire", new DashboardOptions
    {
        AuthorizationFilters = new[] { new AuthorizationFilter() }
    });

    app.UseHangfireServer();
}

Я пытаюсь использовать собственный фильтр авторизации:

public class AuthorizationFilter : IAuthorizationFilter
{
    public bool Authorize(IDictionary<string, object> owinEnvironment)
    {
        var context = new OwinContext(owinEnvironment);

        return context.Authentication.User.Identity.IsAuthenticated;
    }
}

Я надеялся использовать context.Authentication.User для аутентификации, но он всегда возвращает ноль.

Есть ли способ заставить это работать для собственной службы Hangfire?


person notlkk    schedule 06.05.2015    source источник
comment
У вас нет подключенных фреймворков аутентификации, поэтому вы получаете null. Используйте базовую аутентификацию.   -  person odinserj    schedule 08.05.2015
comment
@notlkk - не могли бы вы поделиться решением, которое сработало для вас. Я также сталкиваюсь с аналогичной проблемой с лазурной рабочей ролью. Опубликовано на SO также, но без помощи. stackoverflow.com/questions/34767082/   -  person Yogi    schedule 14.01.2016
comment
не решение об этом?   -  person Kiquenet    schedule 24.12.2017