13

我有一个SignalR使用OWIN. 我想将 Windows 身份验证添加到传入的请求中。这可能吗?

我相信我可以通过这样的方式添加例如表单身份验证。

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

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

4

2 回答 2

25

理想情况下会有一个 NTLM owin middlware,但由于没有中间件,您可以通过获取 HttpListener 的句柄并以这种方式启用身份验证来解决它(HttpListener 本身支持它):

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

        app.MapHubs();
    }
}
于 2013-07-04T01:49:42.750 回答
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 仅用于初始身份验证往返(因为请求数量很大)。

于 2015-03-17T07:35:23.750 回答