Как я могу аутентифицировать мобильных клиентов с помощью OAuth и .Net Core Identity?

Некоторое время я пытался реализовать мобильную аутентификацию, чтобы клиенты могли использовать свои телефоны для аутентификации на моем веб-сайте .NET Core. Чтобы быть ясным, точная настройка, которую я пытаюсь достичь, такова:

  1. Клиенты могут зарегистрироваться на сайте или в приложении на телефоне.
  2. Клиенты также могут войти в систему на веб-сайте или в приложении на телефоне.
  3. После аутентификации пользователи телефонного приложения могут получить доступ к защищенным API-интерфейсам.

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

Я придерживался вышеизложенного довольно долгое время, и мне всегда казалось, что я слишком усложняю реализацию. Настройка вышеуказанного в тривиальном приложении .NET Core обычно означает, что я устанавливаю OpenIddict, настраиваю поток паролей, включаю токены обновления, настраиваю пользовательские контроллеры для облегчения процесса регистрации / входа в систему. А затем на стороне приложения телефона сохраните токен где-нибудь и вставьте его в будущие HTTP-запросы, если они доступны. Это происходит без интеграции вышеупомянутого с идентификатором .NET Core, поэтому прошедшие проверку пользователи могут получить доступ к своим собственным данным, таким как электронная почта и т. Д. Все примеры в Интернете, которые я видел, показывают, что OpenIddict используется для выполнения вышеуказанного, но не показывает, как затем сделать которые работают с .NET Core Identity.

Итак, как я могу создать основной веб-сайт .NET, который позволит людям аутентифицироваться на нем на мобильных клиентах? Должен ли я использовать что-то вроде OpenIddict или мне не хватает более простого пути?


person Lewis Cianci    schedule 23.07.2019    source источник
comment
Взгляните на authorization_code поток OAuth. Он в основном перенаправляет пользователей вашего приложения на страницу входа, где они обменивают свои учетные данные на access_code, а затем ваше мобильное приложение обменивает их на access_token + refresh_token. Пока токен обновления действителен, пользователю не требуется повторная аутентификация. Вы можете ознакомиться с ним здесь: docs.identityserver.io / ru / latest / themes /   -  person jpgrassi    schedule 24.07.2019
comment
На мой взгляд, я склонялся к потоку паролей из-за того, что это проще ... но сторонние библиотеки и т.д., похоже, лучше поддерживают поток authorization_code. Я попробую, спасибо.   -  person Lewis Cianci    schedule 25.07.2019


Ответы (1)


Должен ли я использовать что-то вроде OpenIddict или мне не хватает более простого пути?

Использование сервера OpenID Connect и потока кода - в идеале, с ключом подтверждения для обмена кодом - безусловно, ваш лучший вариант, и он соответствует всем вашим требованиям.

Если вы предпочитаете управляемые реализации, вы можете взглянуть на предложения поставщиков удостоверений, таких как Azure AD, Okta или Auth0.

person Kévin Chalet    schedule 03.09.2019
comment
Вероятно, полностью потому, что мне не хватает возможности реализовать работающую реализацию OpenIddict в моем основном приложении .net, но я просто не понимаю, почему конфигурирование и настройка OpenIddict в новом базовом приложении .net так же сложно, как и в настоящее время. Мой опыт заключался в установке пакета, настройке Startup.cs на то, что я хочу, копировании кода контроллера из образца на github, нажатии кнопки «Go» и надежде, что это сработает. Опять же, это скорее отражение меня, чем OpenIddict. - person Lewis Cianci; 04.09.2019
comment
Мне кажется, что если бы OpenIddict предоставил более простой вариант настройки, который мог бы настроить его в Startup.cs, и, возможно, использовал бы что-то вроде библиотек Razor View для необходимых визуальных вещей, это было бы потрясающе. Даже если бы этот путь поддерживал самый простой поток (например, поток паролей с токенами обновления), он все равно был бы лучше, чем люди, пытающиеся реализовать что-то вроде OpenIddict, отказываясь и вместо этого сохраняя user / pass для будущих входов. Эта библиотека, тем не менее, великолепна, и я очень благодарен вам за ее создание и поддержку (даже перед лицом таких людей, как я, которые слишком сильно визжат!) :) - person Lewis Cianci; 04.09.2019
comment
Примерно так и работали первые биты OpenIddict, но они были слишком ограничены и недостаточно расширяемы. Так же работает Identity UI, но отзывы показали, что это был плохой подход и, вероятно, в какой-то момент от Identity UI откажутся. Если вам нужен опыт без кода, вы можете предоставить модуль OpenID OrchardCore, основанный на OpenIddict. - person Kévin Chalet; 04.09.2019