Подскажите пожалуйста знающие люди направление копания.
Есть идея сделать сервис, который будет выполнять автоматически, без участия пользователя, определенные действия на другом, стороннем сайте. Естественно сторонний сайт требует авторизации по логину/паролю. OAuth нет. Т.е. для входа на сайт всегда нужна комбинация логин/пароль. Есть еще ключ сесси, который по идее можно получить и хранить вместо логина/пароля, но есть вероятность, что ключ станет невалидным. Тогда пользователь должен будет «перевойти», что не удобно. Да и поддерживать этот ключ надо будет, постоянно «пингуя» сторонний сервис.
Собственно вопрос — как это всё максимально секьюрно организовать, чтобы и пользователь чувствовал себя защищенным и себя максимально обезопасить от воровства паролей клиентов?
Пока вижу только вариант с хитрым самописным алгоритмом шифрования (или «обычным» алгоритмом с зашитой в исходник солью), скомпилированным в исполняемый код, а в базе понятно зашифрованные логин/пароль.
Еще раз уточню схему:
1. Пользователь регистрируется на моем сервисе, оставляет (?) логин/пароль от стороннего сервиса
2. Сервис сам (по крону) логинится за пользователя на стороннем сервисе, производит действия, пишет логи.
3. Клиент заходит на мой сервис, проверяет логи.
Обычно то, насколько пользователь чувствует себя защищенным, не сильно зависит от того, как и что вы шифруете — пользователь этого всего не видит. Обезопасить от воровства — да, шифрование, соль…
если сторонний сервис не поддерживает открытой авторизации, то только логин с паролем. Можно конечно извращаться, но обычно малейшее изменение в логике сервиса, и вы должны искать новый способ хранения данных.
Вопрос был в том, как безболезненно и «правильно» реализовать этот механизм.
Скажем, более секьюрно было бы шифровать логин/пароль на стороне клиента Javascrtip'ом, но тогда будет доступен алгоритм шифрования.
А при чем тут логика работы стороннего сервиса?
У Вашего сервиса есть НЕЧТО_1, что должно иметь возможность САМОСТОЯТЕЛЬНО без участия Вас и клиента аутентифицироваться на сайте. Если в Вашей модели нет НЕЧТО_2, которое не подвержены краже, то при краже происходит полный переход этого НЕЧТО_1 злоумышленнику и он полностью имперсонируется от имени Вас, т.е. по факту — от Вашего пользователя.
Чем может быть НЕЧТО_2?
— проверкой по IP-адресу Вашего сервера — как я понимаю, не подходит, т.к. у клиента должна остаться возможность аутентифиицироваться и мимо Вашего сервиса;
— нечто, что находится постоянно в оперативной памяти Вашего сервиса и не может быть украдено/перехвачено (сниффером) — тут уже надо думать, основные проблемы могут быть с рестартом Вашего сервиса — может для Вас будет приемлемым просыпаться в 3 часа ночи в случае рестарта сервиса и заново вводить пароль шифрования хранящихся на диске данных клиента;
— что-то еще — я не совсем понимаю Вашу специфику — может найдется и еще что-то.
Спасибо за идею с вводом во время старта.
Для пущей безопасности НЕЧТО_2 должно быть разное для каждого пользователя, чтобы потеря его не привела к потере всех паролей, а только одного.
это не связанные идеи ;)
Хотя может быть и такая схема — пользователь вводит логин/пароль, которые не сохраняются в базе, а запускается демон (для каждого пользователя свой), у которого в памяти держатся логин/пароль. Возникает проблема с рестартом этих демонов…