2013-07-03 4 views
13

私は自己ホスト型のSignalRアプリケーションをOWINを使用しています。 着信要求にWindows認証を追加したいと思います。 これは可能ですか?SignalRとOWINのセルフホスティングによるWindows認証

私は、フォーム認証via something like this

しかし、Windows認証を使用して同様のことを行う方法はありません。

私の代替計画は、代わりにIISでホストすることですが、可能であれば、私のアプリケーションをWindowsサービスとして保持できるようにしたいと考えています。 (それがネイティブにHttpListenerをでサポートされています)

答えて

24

は理想的middlware owin NTLMがあると思いますが、何もありませんので、あなたは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認証を有効にすると、「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です:

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(); 

    // ..... 
} 
https://github.com/pysco68/Pysco68.Owin.Authentication.Ntlm

最小限の使用例は次のようになります

パフォーマンス上の理由から、Cookie認証を最後に固執し、NTLMを最初の認証用に使用することに決めました。 und-trip(要求数が多いため)。