Вы правы в том, что на данный момент наиболее комплексные решения для аутентификации и авторизации в системах, сильно зависящих от 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.
Другой альтернативой является создание собственного пользовательского решения, это обычно не одобряется, потому что легко ошибиться, но теория будет такой:
- Обработка аутентификации и регистрации пользователей (возможно, с использованием ASP .NET Identity)
- При входе в систему обменяйте учетные данные пользователя с каким-либо токеном, который впоследствии можно будет использовать для вызова API.
Токен может быть просто случайным (не угадываемым) значением, используемым в качестве ссылки на какое-то хранилище на стороне сервера, которое будет содержать информацию о соответствующем пользователе.
person
João Angelo
schedule
28.11.2016