我有一個使用OWIN
的自託管的SignalR
應用程序。 我想將Windows身份驗證添加到傳入的請求。 這可能嗎?使用SignalR和OWIN自託管進行Windows身份驗證
我相信我可以添加例如表單身份驗證via something like this。
但是我找不到任何方式使用Windows身份驗證來做類似的事情。
我的備用計劃是在IIS中託管,但我更希望能夠將我的應用程序保留爲Windows服務(如果可以的話)。
我有一個使用OWIN
的自託管的SignalR
應用程序。 我想將Windows身份驗證添加到傳入的請求。 這可能嗎?使用SignalR和OWIN自託管進行Windows身份驗證
我相信我可以添加例如表單身份驗證via something like this。
但是我找不到任何方式使用Windows身份驗證來做類似的事情。
我的備用計劃是在IIS中託管,但我更希望能夠將我的應用程序保留爲Windows服務(如果可以的話)。
理想情況下,會是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();
}
}
我面臨與您一樣的問題,並決定實施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不需要旅行(因爲需求量很高)。
謝謝!這看起來像是在做伎倆。我現在遇到了一個進一步的問題,即啓用NTLM auth後,我得到一個'Access-Control-Allow-Origin'錯誤。這看起來可能是[這裏]修正的(https://github.com/SignalR/SignalR/issues/1735),所以當我有時間測試它時,我需要嘗試獲取最新的SignalR版本。 –
我假設你啓用了跨域。閱讀這個http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#crossdomain – davidfowl
是的,我想我已經得到它的一切 - 當然,如果我評論它的作品出'AuthenticationSchemes'行。我提出了一個[單獨的問題](http://stackoverflow.com/questions/17485046/signalr-cross-domain-connections-with-self-hosting-and-authentication),因爲它感覺這是一個單獨的問題。 –