Thinktecture Identityserver с повышенными правами входа на страницу администратора

Я создаю сайт, на котором я хочу разрешить администратору входить в систему с комбинацией имени пользователя и пароля для выполнения своих обычных административных задач. Но раз ему нужно выполнить какие-то «опасные» задачи, я хочу заставить его войти в систему с использованием 2FA (только один раз) и, таким образом, повысить его разрешения для текущей сессии.

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

Спасибо


person Niko Dierickx    schedule 05.08.2015    source источник


Ответы (1)


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

Пример: создайте область «администратора» и «опасную» область и сделайте обе области доступными для вашего клиента. При первоначальном входе в систему просто попросите «admin», но когда они попадут на опасную страницу, отправьте еще один запрос на вход, но запросите как «admin», так и «dangerous» область действия.

Кроме того, если только определенные администраторы могут выполнять опасную задачу, убедитесь, что только этим администраторам предоставлена ​​«опасная» претензия. Вы можете вручную поместить это утверждение в таблицу UserClaims или, если вы используете MembershipReboot в качестве доступа к базе данных, используйте метод AddClaim() для объекта учетной записи пользователя.

Обновление: извините, этот ответ не связан с двухфакторной аутентификацией, а больше связан с тем, как добавить вторую область действия к токену пользователя.

Обновление. Например, если вы используете поток "владелец ресурса", исходный запрос на вход с областью действия "администратор" выглядит следующим образом:

POST /ids/connect/token HTTP/1.1
Host: https://mywebsite.com
  Content-Type: application/x-www-form-urlencoded;charset=UTF-8

 grant_type=password&username=billybob&password=mypassword&scope=admin&client_id=MyClientId&client_secret=MyClientSecret

Затем, когда вы хотите получить «опасную» область, выполните еще один вход в систему таким же образом, но добавьте «опасную» область в свой запрос (разделенный пробелом), токен доступа, который вы получите, теперь будет иметь обе области (административный и опасный). ):

POST /ids/connect/token HTTP/1.1
Host: https://mywebsite.com
  Content-Type: application/x-www-form-urlencoded;charset=UTF-8

grant_type=password&username=billybob&password=mypassword&scope=admin dangerous&client_id=MyClientId&client_secret=MyClientSecret
person bitcoder    schedule 05.08.2015
comment
Спасибо, я понимаю, что вы имеете в виду, но можете ли вы объяснить, как явно отправить другой логин с дополнительной областью действия в mvc? В настоящее время я только установил конфигурацию области при запуске в классе запуска. - person Niko Dierickx; 06.08.2015
comment
Я добавил обновление; не уверен, как вы входите в систему прямо сейчас (используете ли вы вызов библиотечной функции?), поэтому я обновил то, что вы увидите на проводе - person bitcoder; 06.08.2015
comment
Если я не ошибаюсь, владелец ресурса не поддерживает 2fa, в настоящее время я стремился использовать гибридный поток. - person Niko Dierickx; 07.08.2015
comment
Хорошо, мои извинения, мой ответ не имеет ничего общего с 2FA, я не знал аббревиатуру, я думал, что вы просто пытаетесь помешать пользователю использовать опасный метод, не зная явно, что это опасно. Этот пост от Брока указывает на то, что в образце AspNetIdentity есть пример кода 2fa, так что он может вам помочь: github.com/IdentityServer/IdentityServer3.Samples/issues/29 - person bitcoder; 07.08.2015
comment
Если вы объедините этот метод с добавлением претензии при использовании 2FA, вы, вероятно, получите то, что вам нужно. - person Simon Halsey; 11.08.2015