【问题标题】:GetHttpContext() null while authenticating user in SignalR Hub在 SignalR Hub 中对用户进行身份验证时 GetHttpContext() null
【发布时间】:2015-10-19 22:17:49
【问题描述】:

我正在尝试在 SignalR Hub 中使用 Asp.Net Identity 创建和登录用户,如下所示:

public string CreateUser(string username, string password)
{
    var userStore = new UserStore<IdentityUser>();
    var manager = new UserManager<IdentityUser>(userStore);

    var user = new IdentityUser() { UserName = username };
    IdentityResult result = manager.Create(user, password);

    if (result.Succeeded)
    {
        var authenticationManager = Context.Request.GetHttpContext().GetOwinContext().Authentication;
        var userIdentity = manager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
        authenticationManager.SignIn(new AuthenticationProperties() { }, userIdentity);
        return "Success";
    }
    else
    {
        var authenticationManager = Context.Request.GetHttpContext().GetOwinContext().Authentication;
        return "Failed: "+result.Errors;
    }
}

但是 GetHttpContext() 总是为空,有人能解释一下为什么吗?

从 Hub 中调用 SignIn 方法的最佳方式是什么?

【问题讨论】:

    标签: signalr signalr-hub


    【解决方案1】:

    这里是一个古老的问题,但是集线器是一个开放的沟通渠道,所以像这样使用表单身份验证和身份的过程是行不通的。没有响应设置标题或设置 cookie 的方法。为此,您需要定期进行 HTTP 交换。

    【讨论】:

    • 您好,感谢您的评论,是的,这很难解决。我最终使用了一个基本上执行 http 基本身份验证的 owin 模块 - 这是当时推荐的方法来做这件事有什么建议吗?
    • 我不确定您为什么要通过持久连接进行身份验证。这样做似乎没有任何好处。
    • 在持久连接上使用集线器的原因是因为只有集线器提供客户端到服务器冷 RPC 调用 - 如果我错了,请纠正我。
    • 好的,但这与身份验证有什么关系?我的意思是,HTTP 是无状态的,通常你不希望打开的连接挂起。 SignalR 的用例主要用于服务器端与客户端/浏览器通信,通常不会监听。
    猜你喜欢
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多