Signalr Nancy和信号员身份验证
我想我错过了一些东西,因为这不应该这么难 我有一个nancy IIS托管的应用程序,它使用有效的身份验证(设置cookie\u nca)。然后我有一个信号集线器,需要获取登录用户的用户名,这样我就可以提取用户所属的“组” 我原以为我可以从Context.User.Identity.Name中获取用户名,但该用户名为空,中心似乎认为我未经授权。我猜我还需要做些别的事情来告诉信号员如何进行身份验证 我认为设置HttpContext.Current.User可能会有所帮助,但这显然也没有起到任何作用 我是这样做的Signalr Nancy和信号员身份验证,signalr,nancy,Signalr,Nancy,我想我错过了一些东西,因为这不应该这么难 我有一个nancy IIS托管的应用程序,它使用有效的身份验证(设置cookie\u nca)。然后我有一个信号集线器,需要获取登录用户的用户名,这样我就可以提取用户所属的“组” 我原以为我可以从Context.User.Identity.Name中获取用户名,但该用户名为空,中心似乎认为我未经授权。我猜我还需要做些别的事情来告诉信号员如何进行身份验证 我认为设置HttpContext.Current.User可能会有所帮助,但这显然也没有起到任何作用
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
pipelines.AfterRequest.AddItemToStartOfPipeline(SetUpContext);
//pipelines.AfterRequest.AddItemToEndOfPipeline(SetUpContext);
CookieBasedSessions.Enable(pipelines);
RouteTable.Routes.MapHubs();
}
private void SetUpContext(NancyContext ctx)
{
if (ctx.CurrentUser == null)
return;
string[] Roles = { "Recipient" };
var userIdent = new UserIdent();
userIdent.IsAuthenticated = true;
userIdent.Name = ctx.CurrentUser.UserName;
GenericPrincipal principal = new GenericPrincipal(userIdent, Roles);
IPrincipal Identity = (IPrincipal)principal;
HttpContext.Current.User = Identity;
}
我还尝试了pipelines.BeforeRequest.AddItemToEndOfPipeline。仍然没有任何运气。这是一个正在使用的信号器2.0和Cookie身份验证这是一个正在使用的信号器2.0和Cookie身份验证,因为信号器2.0基于OWIN,如果您也将OWIN用于Nancy,您的设置将大大简化。你仍然可以使用IIS,它允许你做一些功能强大的事情,比如共享身份验证模块。是的,我得出了这个结论,并开始重写我的应用程序。希望复制粘贴我的大部分工作仍然有效。由于Signalr2.0基于OWIN,如果您也使用OWIN,您的设置将大大简化。你仍然可以使用IIS,它允许你做一些功能强大的事情,比如共享身份验证模块。是的,我得出了这个结论,并开始重写我的应用程序。希望复制粘贴我的大部分工作仍然有效。谢谢,我会看看这个。事实上,我最终使用了JabbR的代码来解决这个问题,但我相信它做的比我想要的要多得多。谢谢,我会仔细看看。事实上,我最终使用了JabbR的代码来解决这个问题,但我相信它比我想要的要多得多。