1

我想我在这里遗漏了一些东西,因为这不应该那么困难。

我有一个使用有效身份验证的 nancy IIS 托管应用程序(设置 cookie _nca)。然后我有一个 signalR 集线器,它需要获取登录人的用户名,这样我就可以拉出用户所属的“组”。

我以为我会从 Context.User.Identity.Name 中获取用户名,但那是空的,集线器似乎认为我没有被授权。我猜我还需要做其他事情来告诉 signalR 如何进行身份验证。

我认为也许设置 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。仍然没有任何运气。

4

1 回答 1

1

这是使用 SignalR 2.0 和 Cookie 身份验证的示例

于 2013-10-07T16:31:51.443 回答