Поделиться через


Настройка внешнего входа Google в ASP.NET Core

От Валерия Новицкий, Рик Андерсон и Шараф Абасери

В этом руководстве показано, как разрешить пользователям входить с помощью учетной записи Google с помощью проекта ASP.NET Core, созданного на предыдущей странице .

Создание идентификатора и секрета клиента Google OAuth 2.0

  • Следуйте рекомендациям в по интеграции Google Sign-In в ваше веб-приложение (документация Google)

  • Перейдите к API Google & Services.

  • Сначала должен существовать Project, возможно, вам потребуется его создать. После выбора проекта перейдите на панель управления.

  • На экране согласия OAuth панели мониторинга:

    • Выберите тип пользователя — внешний и СОЗДАТЬ.
    • В диалоговом окне информации о приложении укажите имя приложения , адрес электронной почты для поддержки пользователей , а также контактные данные разработчика .
    • Перейдите через этап Области.
    • Пройдите через шаг тестовых пользователей.
    • Просмотрите экран согласия OAuth и вернитесь к панели приложения.
  • На вкладке Учетные данные панели мониторинга приложения выберите СОЗДАТЬ УЧЕТНЫЕ ДАННЫЕ>OAuth идентификатор клиента.

  • Выберите тип приложения: >веб-приложение, выберите название .

  • В разделе Авторизованные URI перенаправления выберите ДОБАВИТЬ URI, чтобы задать URI перенаправления. Пример URI перенаправления: https://localhost:{PORT}/signin-google, где плейсхолдер {PORT} является портом приложения.

  • Нажмите кнопку CREATE.

  • Сохраните идентификатор клиента и секрет клиента для использования в конфигурации приложения.

  • При развертывании сайта выберите один из следующих вариантов:

    • Обновите URI перенаправления приложения в Консоли Google на URI перенаправления, развернутого приложения.
    • Создайте новую регистрацию API Google в Google Console для продуктового приложения с URI перенаправления в рабочей версии.

Хранение идентификатора и секрета клиента Google

Сохраните конфиденциальные параметры, такие как идентификатор клиента Google и значения секретов в Secret Manager. В этом примере выполните следующие действия.

  1. Инициализируйте проект для хранения секретов согласно инструкциям по включению хранилища секретов.

  2. Сохраните конфиденциальные параметры в локальном хранилище секретов с помощью ключей секретов Authentication:Google:ClientId и Authentication:Google:ClientSecret:

    dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
    

Разделитель : не работает с иерархическими ключами переменной среды на всех платформах. Например, разделитель : не поддерживается Bash. Двойный символ подчеркивания, __, имеет следующие значения:

  • Поддерживается всеми платформами.
  • Автоматически заменяется двоеточием, :.

Вы можете управлять учетными данными и использованием API в консоли API.

Настройка проверки подлинности Google

Вызов AddIdentity настраивает параметры схемы по умолчанию. Перегрузка AddAuthentication(IServiceCollection, String) задает свойство DefaultScheme. Перегрузка AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) позволяет настраивать параметры проверки подлинности, которые можно использовать для установки схем аутентификации по умолчанию в зависимости от различных целей. Последующие вызовы AddAuthentication переопределяют ранее настроенные свойства AuthenticationOptions.

AuthenticationBuilder методы расширения, которые регистрируют обработчик проверки подлинности, могут вызываться только один раз для каждой схемы проверки подлинности. Существуют перегруженные методы, позволяющие настраивать свойства схемы, имя схемы и отображаемое имя.

Вход с помощью Google

  • Получите ссылку на библиотеку по библиотеке разработчиков Google.
  • Затем перейдите к Google Developer Button Generation.
  • Настройте контроллер так, чтобы он соответствовал атрибуту data-login_uri="{HostName}/{ControllerName}/{actionName}", так как он перенаправит вас на эту ссылку после успешного входа.
  • Создайте контроллер и действие, которое принимает один аргумент string credential, который возвращается Google после завершения процесса входа.
  • Проверьте credential с помощью следующей строки кода: GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(credential);
  • При этом будут получены доступные сведения о пользователе, вошедшего в систему, который затем может храниться в базе данных.

Изменение URI обратного вызова по умолчанию

Сегмент URI /signin-google устанавливается как стандартный обратный вызов поставщика аутентификации Google. Вы можете изменить URI обратного вызова по умолчанию при настройке промежуточного ПО аутентификации Google через унаследованное свойство RemoteAuthenticationOptions.CallbackPath класса GoogleOptions.

Устранение неполадок

  • Если вход не работает, и вы не получаете никаких ошибок, перейдите в режим разработки, чтобы упростить отладку проблемы.
  • Если Identity не настроен вызовом services.AddIdentity в ConfigureServices, попытка аутентификации приводит к ArgumentException: опция SignInScheme должна быть указана. Шаблон проекта, используемый в этом руководстве, гарантирует, что Identity настроен.
  • Если база данных сайта не была создана путем применения начальной миграции, при обработке запроса произошла ошибка : сбой операции базы данных. Выберите Применить миграции, чтобы создать базу данных, и обновите страницу, чтобы продолжить процесс после исправления ошибки.
  • Ошибка HTTP 500 после успешной проверки подлинности запроса поставщиком OAuth 2.0, таким как Google: см. эту проблему GitHub .
  • Как реализовать внешнюю проверку подлинности с помощью Google для React и других приложений SPA: смотрите эту задачу на GitHub.

Дальнейшие действия

  • В этой статье показано, как пройти проверку подлинности с помощью Google. Вы можете следовать аналогичному подходу для аутентификации с другими поставщиками, перечисленными на предыдущей странице.
  • После публикации приложения в Azure сбросьте ClientSecret в консоли API Google.
  • Задайте Authentication:Google:ClientId и Authentication:Google:ClientSecret в качестве параметров приложения на портале Azure. Система конфигурации настроена для чтения ключей из переменных среды.