При поддержке нового веб-приложения в корпоративной среде часто необходимо войти в систему как конкретный пользователь, чтобы диагностировать реальную или предполагаемую проблему, с которой он сталкивается. Здесь действуют две противоположные проблемы:
Лучше всего использовать хешированные или зашифрованные пароли, а не чистый текст. Иногда в середине есть сторонняя система единого входа (SSO). Нет возможности получить пароль пользователя. Если пользователь не предоставит это (не рекомендуется), нет возможности войти в систему как этот пользователь.
Многие веб-приложения имеют персонализация и комплексная авторизация. У разных пользователей разные роли (администратор, менеджер, пользователь) с разными разрешениями. Иногда пользователи могут видеть только свои данные - своих клиентов или задачи. Некоторые пользователи имеют доступ только для чтения, а другие могут редактировать. Таким образом, представление каждого пользователя о веб-приложении уникально.
Предположим, что в корпоративной среде невозможно подойти к рабочему столу пользователя или напрямую подключиться к его машине.
Как вы справляетесь с этой ситуацией?
Обновлено: я хочу повторить, что в крупном финансовом учреждении или типичной компании из списка Fortune 500 с сотнями тысяч сотрудников по всей стране и во всем мире простой разработчик в каком-либо ИТ-подразделении не может напрямую получить доступ к машине пользователя. Некоторые из них являются общедоступными веб-приложениями, используемыми клиентами (например, онлайн-банкинг и торговля акциями). И многие из этих приложений в интрасети полагаются на Active Directory или SSO, а это означает, что учетные данные пользователей одинаковы для многих приложений. Я благодарю вас всех за ваши предложения; некоторые могут быть очень полезны в других средах.

Администратор должен иметь возможность изменить пароль пользователя. Измените пароль пользователя на то, что вам известно. Затем вы можете войти в систему как этот пользователь.
Попросите пользователя сбросить свой пароль после того, как вы закончите отладку.
Правда. Если бы можно было «клонировать» учетную запись пользователя и использовать ее вместо этого, конечному пользователю это не доставило бы неудобств. Это может быть, а может и нет. Кроме того, если вы можете использовать учетную запись «отладчика», чтобы увидеть проблему, это также может быть предпочтительнее, но может не воспроизводиться.
Обычно с помощью какого-либо программного обеспечения для удаленного управления, которое можно использовать для просмотра их рабочего стола. Если они находятся на терминальном сервере Windows, для этого можно использовать встроенные инструменты администратора. В противном случае я бы использовал что-то вроде VNC во внутренней сети или внешнюю службу, например LogMeIn (http://www.logmein.com/).
Не могли бы вы иметь среду тестирования, в которой регулярно копируются данные в реальном времени (очевидно, очищенные для решения любых проблем с безопасностью или защитой данных). Для устранения неполадок можно использовать пользователя, похожего по настройке на того, у кого возникли проблемы, или даже самого пользователя, если это разрешено.
Используйте клиент удаленного рабочего стола, как упоминалось в других ответах, но, опять же, это может быть для вас непрактично. Если у вас есть эти права в домене, я слышал об обработке ошибок, даже при выполнении сканирования экрана и включении этого в журналы! но для меня это звучит немного странно.
Не могли бы вы иметь инструмент администратора для клонирования пользователя в демо-аккаунт?
Для наших веб-приложений мы используем процесс, который из-за отсутствия лучшего термина определяется как «захват» учетной записи пользователя.
По сути, администраторы могут «захватить» учетную запись пользователя простым нажатием кнопки. В коде вы просто используете уникальный идентификатор (идентификатор пользователя работает в менее безопасной среде), который затем устанавливает необходимые учетные данные в сеансе, чтобы они могли работать в профиле этого пользователя. Для более безопасной среды вы можете использовать уникальный хеш для каждого пользователя.
Чтобы гарантировать безопасность этого метода перехвата, он всегда сначала проверяет, что запрос сделан авторизованным администратором с соответствующими правами. Из-за этого возникает необходимость либо для захвата сеанса администратора, либо для захвата их учетных данных для аутентификации, чтобы кто-то когда-либо использовал функцию захвата в приложении.
Мы также используем этот метод, что особенно важно, когда у некоторых из наших пользователей нет имени пользователя (вместо этого они используют SSO). Он просто использует ту же систему сеанса, что и методы входа в систему с помощью имени пользователя / пароля и единого входа, но с помощью кнопки на странице профиля взломанной учетной записи. Нас заставили разрешить некоторым сотрудникам нашей службы поддержки по телефону захватить учетные записи пользователей, и они сочли это бесценным.
У меня было 4 идеи. Пока я набирал, 3 из них уже были предложены (так что я их поддержал)
Вариант по идее 3 - выдача себя за другое лицо:
Чтобы сделать это как можно более «идентичным» обычному входу с минимальными изменениями кода, вы можете добавить возможность олицетворять себя непосредственно при входе в систему, указав учетные данные администратора и альтернативное имя пользователя, например войдите как Admin: пользователь, пароль администратора. Система будет рассматривать это точно как вход в систему как пользователь с паролем пользователя.
Идея 4. Можете ли вы получить доступ к хранилищу паролей? В этом случае временно замените хэш пользователя хешем известного пароля. (пароли часто хранятся в сети в базе данных. Инструмент SQL Query может выполнять обмен)
Мне нравится то, что вы собираетесь делать с № 3, и Нед добавил это.
Некоторые из этих идей причиняют неудобства пользователю, заставляя его менять пароль или занимая его рабочий стол во время сеанса отладки.
Идея Markc самая лучшая: расширить логику аутентификации, чтобы позволить суперпользователям входить в систему как конкретный пользователь, предоставляя не учетные данные пользователя, а имя пользователя и их учетные данные суперпользователя.
Я делал это так раньше (псевдо-питон):
if is_user_authenticated(username, userpassword):
login the user
else if ':' in userpassword:
supername, superpassword = userpassword.split(':')
if is_superuser_authenticated(supername, superpassword):
login the user
Другими словами, если имя пользователя и пароль не аутентифицируются, если пароль имеет двоеточие, то на самом деле это имя пользователя и пароль администратора, соединенные двоеточием, поэтому войдите в систему как имя пользователя, если они являются правильными именем пользователя и паролем администратора.
Это означает, что вы можете войти в систему как пользователь, не зная его секретов и не доставляя им неудобств.
Да, я считаю, что это возможно. Для того, чтобы вообще получить доступ к приложению, может потребоваться создать действующего пользователя «гостевой администратор». Когда этот пользователь входит в систему, он получает специальный пользовательский интерфейс для ввода имени пользователя (и другой возможной информации, которая могла бы быть получена откуда-то вроде Active Directory, например, Group или Dept).
Нет необходимости в специальном пользовательском интерфейсе. Введите имя пользователя в поле имени пользователя и supername: superpass в поле пароля.
+1 Я думаю, что это замечательно, поскольку это позволяет вам фактически войти в систему как конкретный пользователь (а не имитировать их или что-то еще). Таким образом, он должен избавиться от «Я не могу воспроизвести проблему» или, по крайней мере, подтвердить, что это связано с их локальной средой (например, браузером и т. д.).
Решение, которое мы использовали в наших веб-приложениях, состоит в том, чтобы authN / authZ возвращал желаемого пользователя в качестве эффективного пользователя. Мы делаем это с помощью функции администратора для настройки маскарада, а затем, когда мы запрашиваем пользователя, вошедшего в систему в данный момент (current_user), мы обрабатываем маскарад:
def current_user_with_effective_user
if masked?
current_user_without_effective_user.masquerade_as
else
current_user_without_effective_user
end
end
alias_method_chain, :current_user, :effective_user
Это прискорбно: почему пользователю должно быть неудобно из-за того, что вы выполняли отладку?