【问题标题】:IsAuthenticated property is still false after user authentication in SignalR在 SignalR 中进行用户身份验证后,IsAuthenticated 属性仍然为假
【发布时间】:2013-12-01 05:42:22
【问题描述】:

我的 MVC Web 应用程序中有一个登录用户,但我的 Hub 类中的 IsAuthenticated 属性仍然是错误的。这是我的登录和重定向序列:

  1. 用户提交Login 表单。
  2. 应用程序验证用户信息。
  3. 应用程序创建FormsAuthenticationTicket 并使用FormsAuthentication 类加密票证。
  4. 应用程序将加密票证添加到 FormsAuthentication.FormsCookieName 路径中的响应 cookie。
  5. 然后我将其重定向到启动 SignalR 连接的视图,当我在覆盖 OnConnected 方法中检查用户是否经过身份验证时,我发现它仍然是错误的。

我应该如何处理这个问题,我在 SignalR 1.1 中的授权没有任何问题,我使用的是相同的代码,但这次是 SignalR 2.0。

更新: 实际上它在 SignalR Hub 类中仍然不是假的,它在整个应用程序域中都是假的。

任何建议都会有所帮助。提前致谢。

【问题讨论】:

    标签: c# asp.net-mvc authentication signalr asp.net-mvc-5


    【解决方案1】:

    如果是自己在response中添加cookie,也需要自己解决。

    if(Login(model.UserName, model.Password)){
        // ecrypt user data and add to cookie
        // your code
    }
    
    // Global file code
    protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
    {
        // decrypt cookie and set current principal
        // your code
    
        Thread.CurrentPrincipal = HttpContext.Current.User = principal;
    }
    

    此外,如果传统的 GenericPrincipal 不适合,您需要一个客户主体类来存储用户信息。

    【讨论】:

    • @ahmadalibaloch 从cookie中获取值后,如果在写cookie的时候加密了字符串值需要解密,最好多了解IPrincipal接口。
    • 太棒了!它有效(SignarR + 现有 cookie)
    【解决方案2】:

    在 Visual Studio 2013 中,默认 MVC 模板使用 ASP.Net 身份验证系统并将<authentication mode="None" /> 放入 web.config,因此这会阻止应用程序创建HttpCookie。我只是将其更改为<authentication mode="Forms" />,现在它可以工作了。

    【讨论】:

    • 设置上述模式后我仍然得到isAuthenticated false。
    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 2021-02-24
    • 2013-03-11
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多