2013-07-03 109 views
13

我有一個使用OWIN的自託管的SignalR應用程序。 我想將Windows身份驗證添加到傳入的請求。 這可能嗎?使用SignalR和OWIN自託管進行Windows身份驗證

我相信我可以添加例如表單身份驗證via something like this

但是我找不到任何方式使用Windows身份驗證來做類似的事情。

我的備用計劃是在IIS中託管,但我更希望能夠將我的應用程序保留爲Windows服務(如果可以的話)。

回答

24

理想情況下,會是owin middlware的NTLM但既然是沒有的,你可以通過獲取對HttpListener手柄和啓用身份驗證這種方式解決它(它的原生HttpListener支持):

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

     app.MapHubs(); 
    } 
} 
+0

謝謝!這看起來像是在做伎倆。我現在遇到了一個進一步的問題,即啓用NTLM auth後,我得到一個'Access-Control-Allow-Origin'錯誤。這看起來可能是[這裏]修正的(https://github.com/SignalR/SignalR/issues/1735),所以當我有時間測試它時,我需要嘗試獲取最新的SignalR版本。 –

+0

我假設你啓用了跨域。閱讀這個http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#crossdomain – davidfowl

+0

是的,我想我已經得到它的一切 - 當然,如果我評論它的作品出'AuthenticationSchemes'行。我提出了一個[單獨的問題](http://stackoverflow.com/questions/17485046/signalr-cross-domain-connections-with-self-hosting-and-authentication),因爲它感覺這是一個單獨的問題。 –

3

我面臨與您一樣的問題,並決定實施NTLM/Windows身份驗證中間件;

你可以找到它的NuGet:

Install-Package Pysco68.Owin.Authentication.Ntlm 

來源,並就如何,使用更詳細的信息,它在這裏awailable: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僅用於初始身份驗證ro不需要旅行(因爲需求量很高)。

相關問題