Сигнал формирует проблему безопасности аутентификации - PullRequest
0 голосов
/ 27 ноября 2018

Я занимаюсь разработкой проекта MVC.Я пытаюсь добавить сигнал для уведомления в реальном времени.Тем не менее, обычно я использую сеанс для хранения идентификатора пользователя, вошедшего в систему, но безопасность не позволяет использовать сеанс.Я провел небольшое исследование и выяснил, что все используют проверку подлинности с помощью форм, и сопоставляет своего пользователя с «Context.User.Identity.Name»

public class ChatHub : Hub {

private static readonly ConcurrentDictionary<string, User> Users 
    = new ConcurrentDictionary<string, User>();

public override Task OnConnected() {

    string userName = Context.User.Identity.Name;
    string connectionId = Context.ConnectionId;

    var user = Users.GetOrAdd(userName, _ => new User {
        Name = userName,
        ConnectionIds = new HashSet<string>()
    });

    lock (user.ConnectionIds) {

        user.ConnectionIds.Add(connectionId);

        // TODO: Broadcast the connected user
    }

    return base.OnConnected();
}

}

, и они заполняют этот «Context.User»..Identity.Name 'в контроллере с файлом cookie "FormsAuthentication.SetAuthCookie (loginModel.Name, true);"

[HttpPost]
[ActionName("Login")]
public ActionResult PostLogin(LoginModel loginModel) {

    if (ModelState.IsValid) {

        FormsAuthentication.SetAuthCookie(loginModel.Name, true);
        return RedirectToAction("index", "home");
    }

    return View(loginModel);
}

Что я не понимаю, так это: Хранится ли в файле Context.User.Identity.NameСервер или клиентский компьютер?Если это хранится на компьютере клиента, разве это не проблема безопасности?потому что клиент может изменить имя и получить другие сообщения.

Какое решение?

...