使用SignalR和OWIN自托管的Windows身份验证

时间:2013-07-03 20:18:46

标签: signalr windows-authentication owin

我有一个使用SignalR的自托管OWIN应用程序。 我想为传入的请求添加Windows身份验证。 这可能吗?

我相信我可以添加例如表单身份验证via something like this

但是我找不到任何方法来使用Windows身份验证来做类似的事情。

我的后备计划是在IIS中托管,但如果可以,我希望能够将我的应用程序保留为Windows服务。

2 个答案:

答案 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用于初始身份验证往返(因为请求数量很多)。