Настройка внешнего входа в Twitter с помощью ASP.NET Core

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

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

Примечание.

Пакет Microsoft.AspNetCore.Authentication.Twitter, описанный ниже, использует API OAuth 1a, предоставляемые Twitter. Twitter с тех пор добавил API OAuth 2 с другим набором функций. Пакет AspNet.Security.OAuth.Twitter — это реализация сообщества, использующая новые API OAuth 2.

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

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

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

  • Если у вас нет проекта, создайте его.

  • Нажмите кнопку + Добавить приложение. Введите имя приложения, а затем запишите созданный ключ API, секрет ключа API и маркер носителя. Они потребуются позже.

  • На странице "Приложение Параметры" выберите "Изменить" в разделе параметров проверки подлинности, а затем:

    • Включение 3-ноги OAuth
    • Запрос адреса электронной почты от пользователей
    • Заполните обязательные поля и нажмите кнопку "Сохранить"

    Примечание.

    Microsoft.AspNetCore требуетIdentity , чтобы пользователи имели адрес электронной почты по умолчанию. Для URL-адресов обратного вызова во время разработки используйте https://localhost:{PORT}/signin-twitter, где {PORT} заполнитель является портом приложения.

    Примечание.

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

Хранение ключа и секрета API потребителя Twitter

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

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

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

    dotnet user-secrets set "Authentication:Twitter:ConsumerAPIKey" "<consumer-api-key>"
    dotnet user-secrets set "Authentication:Twitter:ConsumerSecret" "<consumer-secret>"
    

Разделитель : не работает с иерархическими ключами переменных среды на всех платформах. __ (двойной символ подчеркивания):

  • Поддерживается всеми платформами. Например, разделитель : не поддерживается Bash, а __ — поддерживается.
  • Автоматически заменяется на :

Эти маркеры можно найти на вкладке "Ключи и маркеры доступа" после создания нового приложения Twitter:

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

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

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

    services.AddAuthentication().AddTwitter(twitterOptions =>
    {
        twitterOptions.ConsumerKey = Configuration["Authentication:Twitter:ConsumerAPIKey"];
        twitterOptions.ConsumerSecret = Configuration["Authentication:Twitter:ConsumerSecret"];
        twitterOptions.RetrieveUserDetails = true;
    });

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

services.AddAuthentication().AddTwitter(twitterOptions =>
    {
        twitterOptions.ConsumerKey = configuration["Authentication:Twitter:ConsumerAPIKey"];
        twitterOptions.ConsumerSecret = configuration["Authentication:Twitter:ConsumerSecret"];
    });

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

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

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

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

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

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

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

Запустите приложение и выберите вход. Появится возможность входа с помощью Twitter:

Выбор перенаправлений Twitter в Twitter для проверки подлинности:

После ввода учетных данных Twitter вы будете перенаправлены обратно на веб-сайт, где можно настроить электронную почту.

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

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

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

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

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

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

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

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

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

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

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

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