Signalr Nancy和信号员身份验证

Signalr Nancy和信号员身份验证,signalr,nancy,Signalr,Nancy,我想我错过了一些东西,因为这不应该这么难 我有一个nancy IIS托管的应用程序,它使用有效的身份验证(设置cookie\u nca)。然后我有一个信号集线器,需要获取登录用户的用户名,这样我就可以提取用户所属的“组” 我原以为我可以从Context.User.Identity.Name中获取用户名,但该用户名为空,中心似乎认为我未经授权。我猜我还需要做些别的事情来告诉信号员如何进行身份验证 我认为设置HttpContext.Current.User可能会有所帮助,但这显然也没有起到任何作用

我想我错过了一些东西,因为这不应该这么难

我有一个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的代码来解决这个问题,但我相信它比我想要的要多得多。