Аутентификация Windows с помощью самообслуживания SignalR и OWIN - программирование

Аутентификация Windows с помощью самообслуживания SignalR и OWIN

У меня есть самостоятельное приложение SignalR, использующее OWIN. Я хотел бы добавить аутентификацию Windows для входящих запросов. Возможно ли это?

Я считаю, что я могу добавить, например. Аутентификация форм через что-то вроде этого.

Однако я не могу найти способ использовать проверку подлинности Windows, чтобы сделать что-то подобное.

Мой резервный план состоял бы в том, чтобы размещать в IIS вместо этого, но я бы предпочел сохранить мое приложение как службу Windows, если смогу.

4b9b3361

Ответ 1

В идеале, будет использовать MDL OLL, но поскольку нет ни одного, вы можете обойти его, получив дескриптор HttpListener и включив auth таким образом (он поддерживается HttpListener):

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var listener = (HttpListener)app.Properties[typeof(HttpListener).FullName];
        listener.AuthenticationSchemes = AuthenticationSchemes.Ntlm;

        app.MapHubs();
    }
}

Ответ 2

Я столкнулся с той же проблемой, что и вы, и решил внедрить промежуточное программное обеспечение NTLM/Windows Authentication;

Вы можете найти его в Nuget:

Install-Package Pysco68.Owin.Authentication.Ntlm 

Источники и более подробная информация о том, как их использовать, доступны здесь: https://github.com/pysco68/Pysco68.Owin.Authentication.Ntlm

Пример минимального использования может выглядеть так:

public void Configuration(IAppBuilder app)
{
    // use default sign in with application cookies
    app.SetDefaultSignInAsAuthenticationType(
         DefaultAuthenticationTypes.ApplicationCookie);

    app.UseCookieAuthentication(new CookieAuthenticationOptions()
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie                
    });

    // Enable NTLM authentication
    app.UseNtlmAuthentication();

    // .....
}

Обратите внимание, что по соображениям производительности я решил придерживаться аутентификации Cookie в конце и использовать NTLM только для первоначальной проверки в оба конца (из-за большого количества запросов).