Разрешить стороннику войти в систему как другой пользователь - PullRequest
1 голос
/ 23 мая 2019

В настоящее время у нас есть приложение Identity server 4.Использование ядра инфраструктуры сущностей и удостоверения личности asp.

У нас есть группа сторонников, которым необходимо иметь возможность доступа к учетным записям наших пользователей, чтобы помочь им с проблемами по телефону.Наши пользователи не могут понять, как использовать Team Viewer.Поскольку большинство из них являются мобильными и в то время будут иметь только мобильный телефон.

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

Текущее решение и его проблемы

Текущий хак создает конечную точку API, которую могут использовать только наши сторонники, поскольку она заблокирована, чтобы ее могли использовать только те, у кого есть разрешение сторонника.Они отправляют пользователям электронное письмо, и мы взламываем их, создаем токен доступа, который затем используется приложением (веб-версия), чтобы действовать как пользователь, у которого возникают проблемы.

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

Что я хочу сделать

Я действительно хотел бы сделать это менее хакерским способом.Так есть ли способ входа пользователя в приложение, если он не является тем, кто выполняет вход, и возвращает токен доступа?

Я пытался сделать

await _signInManager.SignInAsync(user, false, null);

Но я не могу понять, как получить это, чтобы вернуть токен доступа.

Что я действительно хотел бы сделать, этоу сторонников есть возможность войти в любой аккаунт, но сделать это как-нибудь безопасно.

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

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

  1. Перейти к клиентскому приложению
  2. Войдите, используя любые учетные данные
  3. Проверьте, существуют ли какие-либо разрешения на олицетворение (как они определены, полностью зависит от вас)
  4. Запрос на выбор учетной записи для олицетворения (или просто продолжить как сам)
  5. Войти как выбранный аккаунт (с записью оригинального актера)
  6. Перенаправление для авторизации конечной точки
  7. Выпуск токенов и перенаправление обратно в клиентское приложение
2 голосов
/ 23 мая 2019

Проблема с учетной записью пользователя заключается в том, что она не привязана ни к одному приложению.Таким образом, позволяя другим входить в систему с использованием учетной записи, вы также предоставляете им доступ к другим приложениям.В качестве обходного пути вы можете использовать «общедоступные» учетные записи, такие как engineer_01, engineer_02 и т. Д.

Но это может не понадобиться вообще.IMO действительно хочет выдать себя за пользователя, а не «взломать» учетную запись.

Один из способов сделать это - расширить IdentityServer с помощью пользовательского типа предоставления с помощью расширения предоставления .

Как это может работать:

Зарегистрированный пользователь, которому разрешено выдавать себя за пользователей для конкретного клиента / ресурса, запрашивает токен доступа в новой конечной точке олицетворения.

Пользователь отправляет sub от пользователя для олицетворения в конечную точку, где проверяются пользователь и (комбинация) подпрограмма.

Когда доступ предоставлен, новый (недолговечный) токен доступаВозвращается, который может использоваться для олицетворения пользователя без необходимости знать учетные данные пользователя.

Маркер доступа должен содержать информацию о конечной точке, чтобы можно было определить, выдал ли себя пользователь за другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...