我有一个使用SignalR
的自托管OWIN
应用程序。
我想为传入的请求添加Windows身份验证。 这可能吗?
我相信我可以添加例如表单身份验证via something like this。
但是我找不到任何方法来使用Windows身份验证来做类似的事情。
我的后备计划是在IIS中托管,但如果可以,我希望能够将我的应用程序保留为Windows服务。
答案 0 :(得分:25)
理想情况下,有一个NTLM owin middlware,但由于没有,你可以通过获取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();
}
}
答案 1 :(得分:3)
我遇到了与您相同的问题,并决定实施NTLM / Windows身份验证中间件;
你可以在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用于初始身份验证往返(因为请求数量很多)。