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

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

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

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

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

  • Перейдите на страницу приложения "Разработчики Facebook" и войдите в систему. Если у вас еще нет учетной записи Facebook, используйте ссылку "Регистрация для Facebook " на странице входа, чтобы создать ее. После того как у вас есть учетная запись Facebook, следуйте инструкциям для регистрации в качестве разработчика Facebook.

  • В меню Мои приложения выберите "Создать приложение". Появится форма создания приложения. Facebook for developers portal open in Microsoft Edge

  • Выберите тип приложения, который лучше всего подходит для проекта. Для этого проекта выберите "Потребитель" и " Далее". Создается новый идентификатор приложения.

  • Заполните форму и нажмите кнопку "Создать приложение ".

    Create a New App ID form

  • На странице "Добавление продуктов в приложение" выберите "Настроить" в карта входа Facebook.

    Product Setup page

  • Мастер быстрого запуска запускается с выбором платформы в качестве первой страницы. Обойдите мастер для этого, щелкнув ссылку FaceBook Login Параметры в меню слева:

    Skip Quick Start

  • Представлена страница Параметры клиента OAuth:

    Client OAuth Settings page

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

Примечание.

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

  • Выберите Сохранить изменения.

  • Выберите ссылку Параметры> Basic в области навигации слева.

  • Запишите ваше App ID и ваше App Secret. Вы добавите оба приложения 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 для работы с прокси-серверами и подсистемами балансировки нагрузки.

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

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

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

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

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

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

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

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

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

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

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