【问题标题】:SignalR authentication within a Controller?控制器内的 SignalR 身份验证?
【发布时间】:2012-11-14 14:32:31
【问题描述】:

我正在使用 SignalR,但我似乎无法掌握身份验证来构建公共与安全聊天的演示应用程序。有一个聊天室,我想证明经过身份验证的用户将收到公共消息经过身份验证的用户消息。使用AccountController 中的股票 MVC(3) Internet 应用程序完成身份验证。

在控制器中获取 Hub 上下文没有意义,因为它没有连接 ID。如何获取连接 ID 以将特定连接添加到“安全聊天”组?它应该在控制器中完成吗?还是我错过了在中心内执行此操作的方法?

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

            var context = GlobalHost.ConnectionManager.GetHubContext<Chat>();
            // add to signalr secure group
            // but no connection id here

【问题讨论】:

  • 当您像往常一样对用户进行身份验证时。您可以从中心访问用户身份。演示中心有一个连接方法,客户端调用该方法将连接 ID 映射到您的商店身份。 (我自己没有尝试过,但我在查看聊天演示时就是这样理解的。)

标签: asp.net-mvc-3 authentication signalr


【解决方案1】:

完全忽略了明显且有据可查的情况。一旦用户正常通过身份验证,Hub 派生类将能够确认身份验证,例如

public class Chat : Hub
{
    public void send(string message)
    {
        Clients.addMessage(message);
    }

    public void securesend(string message)
    {
        if (this.Context.User.Identity.IsAuthenticated)
        {
            // might not yet be a part of the "secured" group
            Groups.Add(this.Context.ConnectionId, "secured");
            Clients["secured"].addMessage("[SECURED] " + message);
        }
    }
}

【讨论】:

【解决方案2】:

请务必查看最新版本的 SignalR,因为我们有很好的内置属性,您现在可以将其用于授权。

http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx

【讨论】:

    猜你喜欢
    • 2020-06-19
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2021-08-31
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多