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

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

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

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

  • Добавьте в проект пакет NuGet Microsoft.AspNetCore.Authentication.Facebook .

  • Следуйте инструкциям по регистрации приложений Facebook , чтобы создать приложение Facebook и получить идентификатор приложения и секрет приложения.

  • Следуйте инструкциям по входу в систему через Facebook для веб, чтобы настроить вход в систему через Facebook для вашего приложения. Добавьте URI разработки, добавив /signin-facebook (например, https://localhost:44320/signin-facebook) в допустимые URI перенаправления OAuth.

    Проверка подлинности Facebook, настроенная далее в этом руководстве, автоматически обрабатывает запросы по маршруту /signin-facebook для реализации потока OAuth.

Замечание

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

  • Следуйте инструкциям в руководстве по разрешениям для входа в Facebook , чтобы включить разрешение электронной почты для приложения. Промежуточное программное обеспечение проверки подлинности ASP.NET Core для Facebook по умолчанию запрашивает область действия email. Если разрешение электронной почты не включено в приложении Facebook, проверка подлинности может завершиться ошибкой или адрес электронной почты пользователя будет пропущен после входа.

  • Запишите идентификатор приложения и секрет приложения. Вы добавляете оба элемента в ваше приложение ASP.NET Core в следующем разделе.

  • При развертывании сайта перейдите на страницу настройки входа Facebook и зарегистрируйте новый общедоступный универсальный код ресурса (URI).

Сохранение идентификатора и секрета приложения Facebook

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

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

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

    dotnet user-secrets set "Authentication:Facebook:AppId" "<app-id>"
    dotnet user-secrets set "Authentication:Facebook:AppSecret" "<app-secret>"
    

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

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

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

services.AddAuthentication().AddFacebook(facebookOptions =>
{
    facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
    facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
});

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

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

services.AddAuthentication().AddFacebook(facebookOptions =>
    {
        facebookOptions.AppId = configuration["Authentication:Facebook:AppId"];
        facebookOptions.AppSecret = configuration["Authentication:Facebook:AppSecret"];
    });

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

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

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

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

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

Реагирование на отмену авторизации внешнего входа

AccessDeniedPath может предоставить путь перенаправления к агенту пользователя, если пользователь не утверждает запрошенный запрос авторизации.

Следующий код устанавливает AccessDeniedPath на "/AccessDeniedPathInfo":

services.AddAuthentication().AddFacebook(options =>
{
    options.AppId = Configuration["Authentication:Facebook:AppId"];
    options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
    options.AccessDeniedPath = "/AccessDeniedPathInfo";
});

Мы рекомендуем использовать страницу AccessDeniedPath со следующими сведениями:

  • Удаленная проверка подлинности была отменена.
  • Для этого приложения требуется проверка подлинности.
  • Чтобы повторить вход, выберите ссылку для входа.

Тестирование AccessDeniedPath

  • Перейдите к facebook.com
  • Если вы вошли в систему, необходимо выйти из нее.
  • Запустите приложение и выберите вход в Facebook.
  • Выберите "Не сейчас". Вы перенаправляетесь на указанную AccessDeniedPath страницу.

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

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

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

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

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

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

  • Запросите различные сведения о пользователе.
  • Добавьте аргументы строки запроса для настройки интерфейса входа.

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

  • Только ASP.NET Core 2.x: Если Identity не настроен через вызов services.AddIdentity в ConfigureServices, попытка аутентификации завершится ошибкой ArgumentException: необходимо указать параметр "SignInScheme". Шаблон проекта, используемый в этом руководстве, гарантирует, что это сделано.
  • Если база данных сайта не была создана путем применения начальной миграции, при обработке запроса произошла ошибка : сбой операции базы данных. Коснитесь Применить миграцию, чтобы создать базу данных и обновить ее, чтобы продолжить выполнение ошибки.
  • Если во время входа в Facebook возникает ошибка или адрес электронной почты пользователя отсутствует после входа, убедитесь, что разрешение на электронную почту включено для вашего приложения Facebook. Дополнительные сведения о включении разрешений на портале разработчика Facebook см. в руководстве по разрешениям для входа в Facebook .

Дальнейшие шаги

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

  • После публикации веб-сайта в веб-приложении Azure необходимо сбросить AppSecret на портале Facebook для разработчиков.

  • Задайте Authentication:Facebook:AppId и Authentication:Facebook:AppSecret в качестве параметров приложения на портале Azure. Система конфигурации настроена для чтения ключей из переменных среды.

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

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