Использование аутентификации MVC с SignalR v2.x

Пытаюсь внедрить signalR в наш проект.

В настоящее время есть рабочая версия без аутентификации, сервер и клиент успешно общаются через веб-сокеты.

Пока все хорошо!

Следующим шагом было добавление идентификатора имени пользователя для соответствия идентификатору соединения, это то, что я не могу понять.

Пользователь заходит на сайт, попадает на аутентифицированную страницу с HttpContext.User, установленным на нашу версию iprinciple, которая содержит различные биты данных, специфичные для этого пользователя.

Это доступно для обычного контроллера MVC для пост-постов и вызовов ajax, но не для контроллера-хаба (мое имя того, где вызываются методы сигнализатора).

используя что-то вроде этого:

protected object GetAuthInfo()
{
    var user = Context.User;
    return new
    {
        UserName = user.Identity.Name
    };
}

Однако этот Context.User.Identity имеет значение null, а Context.User не авторизован. Мне кажется, что веб-сокет находится в другом сеансе и не знает о начальном сеансе загрузки страницы, поэтому идентификация пользователя не была установлена.

1 ответ

Требуется ли также проверка подлинности для всех концентраторов и методов-концентраторов в вашем приложении путем вызова метода RequireAuthentication при запуске приложения?

public partial class Startup {
  public void Configuration(IAppBuilder app) {
    app.MapSignalR();
    GlobalHost.HubPipeline.RequireAuthentication();
 }
}

(выдержка из http://www.asp.net/signalr/overview/security/hub-authorization)

Надеюсь, это поможет с новым годом! С наилучшими пожеланиями Стефан

Другие вопросы по тегам