Вопрос по signalr, authentication, asp.net-mvc-3 – SignalR аутентификация внутри контроллера?

3

я играю с SignalR, и я могуПохоже, что уловить аутентификацию, чтобы создать демонстрационное приложение для публичного и безопасного чата. Существует один чат, и я хочу продемонстрировать, что аутентифицированные пользователи будут получать публичные сообщенияа также аутентифицированные пользовательские сообщения. Аутентификация выполняется с помощью стандартного интернет-приложения MVC (3).AccountController

Получение контекста Hub внутри контроллера нене имеет смысла, так как это неу него нет идентификатора соединения. Как я могу получить идентификатор соединения, чтобы добавить конкретное соединение в группу длябезопасный чат? Это должно быть сделано в контроллере? Или мне не хватает способа сделать это в хабе?

[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();
            // add to signalr secure group
            // but no connection id here
Когда вы аутентифицировали пользователя, как обычно. Вы можете получить доступ к удостоверению пользователя изнутри хаба. В демонстрационном хабе есть метод join, который клиент вызывает для сопоставления идентификаторов соединений и идентификаторов вашего магазина. (У меня нетЯ сам не пробовал, но вот как я понял это, глядя на демо чата.) Poul K. Sørensen

Ваш Ответ

2   ответа
6

я былполностью с упором на очевидное и хорошо задокументированное. Как только пользователь проходит проверку подлинности как обычно,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);
        }
    }
}
Извините за непонятность - это просто использование обычной аутентификации .NET. SignalR имеет атрибут Authorize, который может использоваться дополнительно, но онне требуется для простых сценариев.asp.net/signalr/overview/signalr-20/security/hub-authorization David Fox
где это задокументировано? Bhavin
^ Я нигде не нашел этого Jonesopolis
3

Обязательно ознакомьтесь с последней версией SignalR, так как у нас есть хорошие встроенные атрибуты, которые вы можете использовать для авторизации сейчас.

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

Похожие вопросы