Архитектура входа в систему для локального java настольного приложения - PullRequest
1 голос
/ 05 апреля 2020

Привет, Я пытаюсь написать свое первое простое локальное настольное приложение с возможностями входа в систему. Должна быть поддержка разных типов пользователей с разными правами доступа. Мне удалось придумать что-то, что работает в простой версии программы, однако на нескольких уровнях это кажется ошибочным. Я просто не знаю, нахожусь ли я на правильном пути со структурой всего приложения. Я также очень не уверен в безопасности.

Вот моя текущая реализация (только логин, указанный c классы / методы) : UML diagram over the login architechture

Вопрос: У кого-нибудь есть рекомендации по внедрению такого рода системы? Или я могу где-нибудь узнать больше о том, как структурировать приложение таким образом, чтобы это имело смысл? Я изучил много шаблонов проектирования и принципов OOB, но мне трудно применять их в реальном приложении.

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

1 Ответ

1 голос
/ 05 апреля 2020

Какой смысл в функции пароля? Если он работает на компьютере, который находится под управлением какого-либо пользователя, а не под вашим пользователем, они получат доступ. Вы ничего не можете с этим поделать.

Как правило, для приложений, которые работают исключительно локально, совмещаются с самой ОС; сохраните данные в домашнем каталоге пользователя и убедитесь, что права доступа к файлу таковы, что другие (не администраторы) пользователи не могут его прочитать. Другие пользователи-администраторы? Ну, они администраторы. Если они хотят это прочитать, они могут, вот в чем смысл таких пользователей. Вы не можете остановить их от этого. Если вы сохраняете соответствующие данные для каждого пользователя в файле, который могут прочитать только они, вам вообще не нужно запрашивать имя пользователя / пароль; их «логин» - это их локальное имя пользователя, а их «аутентификация» - неотъемлемая часть. Простой.

Единственный случай, когда установка пользователя / пароля МОЖЕТ иметь смысл, - это если приложение запускается администратором и запускается в заблокированном режиме, когда приложение, работающее с клавиатурой и мышью, не может получить доступ к корпус системы и не может закрыть приложение вообще. Вот, например, как работает банкомат: это просто windows машины, где «клавиатура» - просто цифровая клавиатура, а мышь и сама компьютерная система заперты в кучу кирпичей и металла. Если вы делаете это, убедитесь, что вы применяете правильную гигиену паролей; не храните его, вместо этого сохраните его bcrypt / pbkdf / argon2 / scrypt ha sh. Таким образом, если кто-то получит этот файл, ваше приложение будет заблокировано, но, по крайней мере, если этот пользователь повторно использует свои пароли на других сайтах (что делают пользователи, в пики), взломать это тоже не удастся.

Я полагаю, у вас этого нет, и это возвращает нас к: Что вы пытаетесь выполнить sh с помощью пароля?

...