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

Авторы: Валерий Новицкий (Valeriy Novytskyy) и Рик Андерсон (Rick Anderson)

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

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

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

  • Перейдите к API Google и службам.

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

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

    • Выберите тип пользователя — внешний и CREATE.
    • В диалоговом окне сведений о приложении укажите имя приложения, электронную почту поддержки пользователей и контактные данные разработчика.
    • Шаг по шагу "Области".
    • Шаг по шагу "Тестовые пользователи ".
    • Просмотрите экран согласия OAuth и вернитесь на панель мониторинга приложения.
  • На вкладке "Учетные данные" панели мониторинга приложения выберите CREATE CREDENTIALS>OAuth client ID.

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

  • В разделе "Авторизованные URI перенаправления " выберите add URI, чтобы задать универсальный код ресурса (URI ) перенаправления. Пример URI перенаправления: https://localhost:{PORT}/signin-googleгде {PORT} заполнитель является портом приложения.

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

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

  • При развертывании сайта либо:

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

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

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

  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

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

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

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options =>
        options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

    services.AddAuthentication()
        .AddGoogle(options =>
        {
            IConfigurationSection googleAuthNSection =
                Configuration.GetSection("Authentication:Google");

            options.ClientId = googleAuthNSection["ClientId"];
            options.ClientSecret = googleAuthNSection["ClientSecret"];
        });
}

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

var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;

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

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

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

Вход с учетными данными Google

  • Запустите приложение и выберите вход. Появится возможность входа с помощью Google.
  • Нажмите кнопку Google , которая перенаправляется в Google для проверки подлинности.
  • После ввода учетных данных Google вы будете перенаправлены обратно на веб-сайт.

Переадресация сведений запроса с помощью прокси-сервера или подсистемы балансировки нагрузки

Если приложение развертывается с прокси-сервером или подсистемой балансировки нагрузки, некоторые сведения из исходного запроса можно перенаправить в приложение в заголовках запроса. Эти сведения обычно включают безопасную схему запроса (https), узел и IP-адрес клиента. Приложения не считывают автоматически и не используют эти заголовки запроса.

Схема используется для создания ссылок, определяющих процесс проверки подлинности с помощью внешних поставщиков. Потеря безопасной схемы (https) приводит к тому, что приложение неправильно выполняет перенаправление на небезопасные URL-адреса.

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

Дополнительные сведения см. в разделе Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки.

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

Если приложению требуется несколько поставщиков, выполните цепочку методов расширения поставщика:AddAuthentication

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

Дополнительные сведения о параметрах конфигурации, поддерживаемых проверкой подлинности Google, см. в справочнике GoogleOptions по API. Это можно использовать для запроса различных сведений о пользователе.

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

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

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

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

Следующие шаги

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