Можно ли в ASP.NET Core упреждать создание нового пользователя в одной схеме, перенаправляя проверку подлинности в другую схему?

Из-за характера нашего приложения у нас могут быть пользователи, входящие через большое количество поставщиков аутентификации, некоторые из которых используют OAuth 1.0 (в частности, LTI). Вместо того, чтобы всегда создавать новую учетную запись пользователя всякий раз, когда мы не распознаем логин, а затем иметь дело со сложным слиянием удостоверений позже, мы хотим предложить явно новым пользователям идентифицировать себя с помощью OpenID (Google и Microsoft прежде всего потому, что это касается большинства наших пользователей.) Мы могли бы запросить у них их U/P, за исключением того, что мы не делаем U/P - мы всегда предпочитали поддерживать вход только через сторонних поставщиков удостоверений и на самом деле не хотим изменить это.

Таким образом, сценарий может заключаться в том, что наша настраиваемая схема проверки подлинности (LTI/OAuth1.0) получает утверждения третьих сторон, определяет, что эти утверждения являются новыми для нашей системы, а затем перенаправляет запрос в нашу схему проверки подлинности по умолчанию. После завершения этой схемы (либо успешной аутентификации, либо отказа пользователя (т. е. NoResult)) мы в идеале вернемся к исходной схеме, чтобы завершить либо создание нового пользователя с использованием предоставленных утверждений, либо добавление дополнительного входа в систему для существующего пользователя. Как только все это будет завершено, будет возвращен окончательный AuthenticationTicket, и запрос будет выполняться как аутентифицированный.

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

Целевая среда — ASP.NET Core 2.0 или 2.1.


person hemp    schedule 19.05.2018    source источник
comment
Подобная двухэтапная аутентификация аналогична шаблону «Индивидуальные учетные записи пользователей», в нем используется двухэтапная аутентификация для внешних учетных записей. Часть учетных записей локальных пользователей является необязательной, вы можете повторно использовать внешний поток входа в систему. Он начинается с того, что анонимные пользователи отправляются на страницу входа с помощью атрибута Authorize и аутентификации cookie. github.com/aspnet/templating/blob/ Там они выбирают свой тип аутентификации и отправляются для входа в систему. Когда они вернутся, вы сможете продолжить.   -  person Tratcher    schedule 27.05.2018


Ответы (1)


Файл ASP.NET Core -> новый шаблон проекта (когда вы выбираете стороннюю аутентификацию) делает что-то подобное, когда вы выбираете вход от стороннего поставщика. Он сохраняет претензии третьих лиц в файле cookie (подписанном) и передает вас на страницу регистрации. Как только вы отправляете форму, она получает утверждения из этого файла cookie вместе с регистрационными данными, создает пользователя в базе данных, уничтожает этот временный файл cookie и выдает настоящий файл cookie авторизации, на который обращают внимание все остальные. Чтобы смягчить атаки воспроизведения, этот промежуточный файл cookie является только файлом cookie сеанса и истекает через короткое время - я думаю, через 5 минут. Вы определенно на правильном пути.

person robrich    schedule 29.05.2018