Как обезопасить клиент ASP.NET Core MVC с помощью отдельного Core API? - PullRequest
7 голосов
/ 25 марта 2019

В настоящее время у меня есть два клиента для одного и того же API, приложение Xamarin Forms и проект ASP.NET Core MVC. Вместо использования Entity в проекте MVC и необходимости переписывать большую часть того, что уже написано в API, мы решили использовать один и тот же API для обоих (изолировать базу данных в процессе).

Однако у меня возникли проблемы при попытке приспособить идентичность к этой ситуации. По сути, нам нужно запросить информацию для входа в этот MVC-клиент, а затем использовать отдельный API для доступа к серверу и аутентификации этой информации.

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

В идеале мы хотели бы иметь возможность использовать [Authorize] и другие полезные теги из Identity в этом клиентском проекте MVC, но не нашли способа внедрить собственный API в этом процессе. Есть идеи?

1 Ответ

7 голосов
/ 25 марта 2019

Идентичность, по своей сути, является структурой управления пользователями.Функции аутентификации / авторизации связаны только косвенно.Когда вы начинаете говорить о необходимости авторизации множества разных приложений, особенно разных типов приложений, таких как мобильное приложение и веб-сайт, вам нужно начать искать поставщика централизованной идентификации.Если вы хотите сыграть свою собственную игру, IdentityServer - почти единственная игра в городе.Для размещенного решения вы можете рассмотреть что-то вроде Auth0 или Azure Active Directory.

Какой бы вариант вы ни выбрали, вам придется использовать различные потоки для разных ситуаций.Мобильное приложение обычно использует поток OAuth для действий, ориентированных на пользователя, тогда как общие запросы, не относящиеся к пользователю, могут использовать учетные данные клиента.Для веб-сайта вы будете использовать проверку подлинности cookie и поток OIDC.Ваш API будет использовать учетные данные клиента или, возможно, гибридный поток аутентификации, если вам нужно поддерживать аутентифицированные запросы на стороне клиента через что-то вроде AJAX.

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

При этом промежуточное ПО для аутентификации и авторизации в ASP.NET Core не привязано к какому-либо конкретному поставщику.В зависимости от того, с чем вы в итоге поедете, вы можете или не можете продолжать использовать ASP.NET Identity (IdentityServer может интегрироваться с этим, но что-то вроде Auth0 будет иметь свое собственное управление пользователями).Однако это никак не влияет на вашу способность продолжать использовать такие вещи, как атрибут Authorize.

...