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

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

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

Создание приложения в Google

  • Перейдите на страницу API Google и служб платформы Google Cloud.
  • Если проект не существует, создайте новый проект, нажав кнопку Создать проект. Чтобы выбрать проект, отличный от существующего проекта, который загружается, нажмите кнопку загруженного проекта в левом верхнем углу пользовательского интерфейса, а затем проект. Чтобы добавить новый проект, нажмите кнопку загруженного проекта в левом верхнем углу пользовательского интерфейса, а затем кнопку "Создать проект ".
  • При создании проекта:
    • Введите имя Проекта.
    • При необходимости выберите организацию для проекта.
    • Выберите кнопку Создать.

После создания проекта страница панели мониторинга проекта загружается, где можно настроить проект.

Откройте вкладку "Учетные данные" , чтобы создать клиент OAuth.

Предварительным условием для создания учетных данных является настройка экрана согласия OAuth. Если согласие не настроено, появится запрос на настройку экрана согласия.

  • Выберите экран "Настройка согласия" или выберите экран согласия OAuth на боковой панели.
  • На экране согласия OAuth выберите "Начать работу".
  • Задайте имя приложения и электронную почту поддержки пользователей.
  • Установите тип аудитории на External.
  • Добавьте контактные данные , введя адрес электронной почты контакта.
  • Примите условия.
  • Нажмите кнопку "Создать".

Создайте учетные данные клиента для приложения, открыв элемент меню боковой панели клиентов :

  • Нажмите кнопку "Создать клиент ".
  • Выберите веб-приложение в качестве типа приложения.
  • Введите имя клиента.
  • Добавьте URI авторизованного перенаправления. Для локального тестирования используйте адрес https://localhost:{PORT}/signin-google по умолчанию, где {PORT} обозначает порт приложения.
  • Нажмите кнопку "Создать ", чтобы создать клиент.
  • Сохраните Client ID и секрет клиента, которые используются далее в конфигурации приложения ASP.NET.

Замечание

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

При развертывании приложения либо:

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

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

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

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

  2. Сохраните конфиденциальные параметры в локальном хранилище секретов с помощью ключей Authentication:Google:ClientId секрета (значение: {CLIENT ID} заполнитель) и Authentication:Google:ClientSecret (значение: {CLIENT SECRET} заполнитель):

    dotnet user-secrets set "Authentication:Google:ClientId" "{CLIENT ID}"
    dotnet user-secrets set "Authentication:Google:ClientSecret" "{CLIENT SECRET}"
    

Двоеточие (:) не работает в качестве разделителя с иерархическими ключами переменных среды на всех платформах. Например, Bash не поддерживает двоеточие (:) в качестве разделителя. Все платформы поддерживают синтаксис двойного подчеркивания (__) и автоматически заменяют его двоеточием (:).

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

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

Google.Apis.Auth.AspNetCore3 Добавьте пакет NuGet в приложение:

dotnet add package Google.Apis.Auth.AspNetCore3

Добавьте службу проверки подлинности в Program файл:

services.AddAuthentication().AddGoogleOpenIdConnect(googleOptions =>
{
    googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
    googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
});

Microsoft.AspNetCore.Authentication.Google Добавьте пакет NuGet в приложение:

dotnet add package Microsoft.AspNetCore.Authentication.Google

Добавьте службу проверки подлинности в Startup.ConfigureServices.

services.AddAuthentication().AddGoogle(googleOptions =>
{
    googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
    googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
});

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

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

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

  • Запустите приложение и выберите Вход.
  • В разделе "Использовать другую службу для входа" выберите Google.
  • Браузер перенаправляется в Google для проверки подлинности.
  • Выберите учетную запись Google, чтобы войти в систему или ввести учетные данные Google.
  • Если это первый вход, появится запрос на предоставление приложению доступа к данным учетной записи Google.
  • Браузер перенаправляется обратно в приложение, где можно задать сообщение электронной почты.

Теперь пользователь вошел с помощью учетных данных Google.

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

  • Если вход не работает без получения ошибок, переключитесь в режим разработки, чтобы упростить отладку приложения и регистрации Google.
  • Если база данных сайта не создана путем применения начальной миграции, возникает следующая ошибка: операция базы данных завершилась сбоем при обработке запроса. Выберите "Применить миграции", чтобы создать базу данных, затем обновите страницу, чтобы продолжить после ошибки.
  • Сведения об ошибке HTTP 500 после успешной проверки подлинности запроса поставщиком OAuth 2.0, например Google, и сведения о том, как реализовать внешнюю проверку подлинности с помощью Google для React и других приложений SPA, см. в разделе ПО промежуточного слоя, не обрабатывающего маршрут "signin-google" после успешной проверки подлинности в Asp.Net Core Web Api External Login Authentication (dotnet/AspNetCore.DocsNo 14169).

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

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

Дополнительные ресурсы

Несколько поставщиков проверки подлинности