Аутентификация Windows с помощью самообслуживания SignalR и OWIN
У меня есть самостоятельное приложение SignalR
, использующее OWIN
.
Я хотел бы добавить аутентификацию Windows для входящих запросов. Возможно ли это?
Я считаю, что я могу добавить, например. Аутентификация форм через что-то вроде этого.
Однако я не могу найти способ использовать проверку подлинности Windows, чтобы сделать что-то подобное.
Мой резервный план состоял бы в том, чтобы размещать в IIS вместо этого, но я бы предпочел сохранить мое приложение как службу Windows, если смогу.
Ответы
Ответ 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 только для первоначальной проверки в оба конца (из-за большого количества запросов).