Веб-API ASP.NET Core + авторизация и аутентификация Angular 2

У меня есть приложение Angular 2, которое взаимодействует с веб-API и выполняет некоторые основные операции CRUD. У меня есть несколько вопросов:

  1. Могу ли я каким-либо образом создать страницу входа/регистрации в Angular 2, используя ASP.NET Identity?
  2. Как мне манипулировать данными, относящимися только к вошедшему в систему пользователю? (Аутентификация на основе токенов? Как это работает? Где об этом прочитать?)
  3. Как я могу реализовать процесс входа/регистрации в реальном приложении Angular 2, не перенаправляя меня на Identity Server?

Я посмотрел на примеры IdentityServer4, OAuth2 и OpenID, это слишком сложно для понимания. Я прошел каждый шаг в быстром запуске, он работает, но я не понимаю, как и что он делает.

Может ли кто-нибудь дать мне какие-либо ресурсы, с которых я могу начать? Блоги, сайты, книги, пошаговые руководства.


person Antoshjke    schedule 15.09.2016    source источник


Ответы (1)


Вы правы в том, что на данный момент наиболее комплексные решения для аутентификации и авторизации в системах, сильно зависящих от HTTP, основаны на OAuth 2.0 и OpenID Connect. Это, конечно, включает ваш конкретный сценарий SPA, вызывающий серверную часть веб-API. Для получения дополнительной информации об этом общем случае вы можете проверить Auth0 SPA + сценарий архитектуры API или просмотрите краткие руководства по выбранным вами технологиям:

Примечание. Auth0 поддерживает OAuth 2.0/OpenID Connect, поэтому даже несмотря на то, что в документации могут быть дополнительные функции, зависящие от поставщика, они могут оказаться полезными, если вы действительно решите пойти по маршруту OAuth 2.0/OpenID Connect. . Это одно из преимуществ использования стандартов, проще переключаться между реализацией/поставщиками.

Однако вам также следует подумать, действительно ли вам нужно полностью перейти на OAuth 2.0/OpenID Connect, поскольку они нацелены на решение множества различных вариантов использования и, как таковые, также несут с собой значительную сложность. Если вы пойдете по этому пути, рекомендуется использовать существующие библиотеки, такие как IdentityServer, или облачных провайдеров, таких как Auth0, потому что ваша собственная реализация сопряжена с большим риском и требует значительных усилий.

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

Другой альтернативой является создание собственного пользовательского решения, это обычно не одобряется, потому что легко ошибиться, но теория будет такой:

  1. Обработка аутентификации и регистрации пользователей (возможно, с использованием ASP .NET Identity)
  2. При входе в систему обменяйте учетные данные пользователя с каким-либо токеном, который впоследствии можно будет использовать для вызова API.

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

person João Angelo    schedule 28.11.2016