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

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

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

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

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

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

  • В меню Мои приложения выберите "Создать приложение". Откроется форма создания приложения . Портал Facebook для разработчиков открыт в Microsoft Edge

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

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

    Создание формы идентификатора приложения

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

    Страница

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

    Пропустить краткое руководство

  • Откроется страница параметров OAuth клиента :

    Страница параметров OAuth клиента

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

Примечание

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

  • Щелкните Save changes (Сохранить изменения).

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

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

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

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

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

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

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

    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:

React отмены авторизации внешнего входа

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. Если Identity не настроено путем вызова services.AddIdentityConfigureServices, попытка проверки подлинности приведет к возникновению аргументаException: необходимо указать параметр SignInScheme. Шаблон проекта, используемый в этом руководстве, гарантирует, что это сделано.
  • Если база данных сайта не была создана путем применения начальной миграции, при обработке ошибки запроса возникает сбой операции базы данных . Нажмите "Применить миграции ", чтобы создать базу данных и обновить ее, чтобы продолжить выполнение ошибки.

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

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

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

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