Аутентификация ASP.NET Core через Google Войти с REST API между ними
У меня есть требование аутентифицировать приложение ASP.NET Core через Google Sign In, но веб-API между клиентским приложением (например, приложением ASP.NET Core) и входом в Google... Я знаю, что это звучит запутанно, поэтому позвольте мне объяснить это с помощью диаграммы.
Вот типичный способ включить кнопку входа в Google и аутентифицировать пользователя с помощью его учетных данных Google. Он отлично работает.
Шаг 1. Сначала создайте новое приложение на портале разработчика идентификаторов Google, сгенерируйте ClientId, ClientSecret и укажите redirect_url, например: https://yoursite.com/signin-google.
Шаг 2. В классе Startup.cs проекта ASP.NET Core используйте AddGoogle в качестве промежуточного программного обеспечения для проверки подлинности, и он отлично работает.
Включая диаграмму ниже для вашего понимания:
А вот и предлагаемый поток. С REST API между клиентом и входом в Google. Вопрос в том, как аутентифицировать клиента?
1 ответ
Насколько я понимаю, вы хотите, чтобы ваше клиентское приложение вызывало службу REST от имени пользователя. Службе REST требуется гарантия того, что и Клиент, и Пользователь аутентифицированы.
Мы достигли этого с помощью гибридного потока OpenID Connect. Плохая новость в том, что для этого нам пришлось добавить в решение еще одну услугу.
Чем это отличается от предложенного вами решения:
- У вас должна быть собственная служба идентификации, и она должна знать о существовании службы REST, клиентского приложения и идентификатора пользователя.
- Клиентское приложение перенаправляет пользователя для аутентификации с помощью службы идентификации (которая в дальнейшем перенаправляет пользователя для аутентификации в Google)
- Identity Server предоставляет клиентскому приложению токен ID для пользователя, а также код, который можно обменять на токен доступа.
- Клиентское приложение запрашивает токен доступа. Этот токен доступа будет аутентифицировать как клиента, так и пользователя.
- Затем клиентское приложение аутентифицируется с использованием этого токена доступа при вызове службы REST.
- Служба REST отправляет одноразовый запрос на сервер идентификации для ключей подписи и использует эти ключи для проверки маркера доступа.
Мы использовали IdentityServer4 при реализации Identity Server, но протокол существует независимо от какой-либо одной реализации.