Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Авторы: Валерий Новицкий (Valeriy Novytskyy) и Рик Андерсон (Rick Anderson)
В этом примере показано, как разрешить пользователям входить с помощью учетной записи Twitter с помощью примера проекта ASP.NET Core, созданного на предыдущей странице.
Примечание.
Пакет Microsoft.AspNetCore.Authentication.Twitter, описанный ниже, использует API OAuth 1.0, предоставляемые Twitter. Twitter с тех пор добавил API OAuth 2.0 с другим набором функций. Пакеты OpenIddict и AspNet.Security.OAuth.Twitter — это реализации сообщества, использующие новые API OAuth 2.0.
Создание приложения в Twitter
Добавьте в проект пакет NuGet Microsoft.AspNetCore.Authentication.Twitter.
Перейдите на панель мониторинга портала разработчика Twitter и войдите в систему. Если у вас еще нет учетной записи Twitter, используйте ссылку "Регистрация сейчас", чтобы создать ее.
Если у вас нет проекта, создайте его.
Нажмите кнопку + Добавить приложение. Введите имя приложения, а затем запишите созданный ключ API, секрет ключа API и маркер носителя. Они потребуются позже.
На странице "Параметры приложения" выберите "Изменить" в разделе параметров проверки подлинности, а затем:
- Включить трёхсторонний OAuth
- Запрос адреса электронной почты от пользователей
- Заполните обязательные поля и нажмите кнопку "Сохранить"
Примечание.
Microsoft.AspNetCore требуетIdentity , чтобы пользователи имели адрес электронной почты по умолчанию. Для URL-адресов для обратного вызова на этапе разработки используйте
https://localhost:{PORT}/signin-twitter, где{PORT}— это заполнитель, обозначающий порт приложения.Примечание.
Сегмент URI
/signin-twitterзадается как обратный вызов по умолчанию поставщика проверки подлинности Twitter. Вы можете изменить URI обратного вызова по умолчанию при настройке промежуточного ПО проверки подлинности Twitter через унаследованное свойство RemoteAuthenticationOptions.CallbackPath класса TwitterOptions.
Хранение ключа и секрета API потребителя Twitter
Храните конфиденциальные настройки, такие как ключ API и секретный ключ потребителя Twitter, в Secret Manager. В этом примере выполните следующие действия.
Инициализируйте проект для использования хранилища секретов в соответствии с инструкциями в Включение хранилища секретов.
Сохраните конфиденциальные параметры в локальном хранилище секретов с помощью ключей секретов
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 Методы расширения, регистрирующие обработчик аутентификации, можно вызывать только один раз для каждой схемы аутентификации. Существуют перегрузки, которые позволяют настроить свойства схемы, имя схемы и отображаемое имя.
Дополнительные сведения о параметрах конфигурации, поддерживаемых аутентификацией Twitter, см. в справочнике по API TwitterOptions. Это можно использовать для запроса различных сведений о пользователе.
Вход с помощью Twitter
Запустите приложение и выберите вход. Появится возможность входа с помощью Twitter:
Выбор Twitter перенаправляет в Twitter для аутентификации:
После ввода учетных данных Twitter вы будете перенаправлены обратно на веб-сайт, где можно настроить электронную почту.
Теперь вы вошли в систему с помощью учетных данных Twitter:
Переадресация сведений запроса с помощью прокси-сервера или подсистемы балансировки нагрузки
Если приложение развертывается с прокси-сервером или подсистемой балансировки нагрузки, некоторые сведения из исходного запроса можно перенаправить в приложение в заголовках запроса. Эти сведения обычно включают безопасную схему запроса (https), узел и IP-адрес клиента. Приложения не читают автоматически эти заголовки запроса, чтобы определить и использовать сведения об исходном запросе.
Схема используется при создании ссылок, что влияет на поток аутентификации с внешними провайдерами. Потеря безопасной схемы (https) приводит к тому, что приложение неправильно выполняет перенаправление на небезопасные URL-адреса.
Используйте компонент middleware Forwarded Headers, чтобы сделать приложению доступной исходную информацию о запросе для его обработки.
Дополнительные сведения см. в разделе Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки.
Устранение неполадок
-
Только для ASP.NET Core 2.x: Если Identity не настроен с помощью вызова
services.AddIdentityвConfigureServices, при попытке аутентификации возникнет исключение ArgumentException: необходимо указать параметр "SignInScheme". Шаблон проекта, используемый в этом примере, обеспечивает настройку Identity. - Если база данных сайта не создана путем применения начальной миграции, при обработке ошибки запроса произойдет сбой операции базы данных. Коснитесь кнопки Применить миграции, чтобы создать базу данных, затем обновите страницу, чтобы продолжить работу после устранения ошибки.
Следующие шаги
В этой статье показано, как выполнить проверку подлинности с помощью Twitter. Вы можете следовать аналогичному подходу для проверки подлинности с другими поставщиками, перечисленными на предыдущей странице.
После публикации веб-сайта в веб-приложение Azure необходимо сбросить
ConsumerSecretв портале разработчика Twitter.Задайте
Authentication:Twitter:ConsumerKeyиAuthentication:Twitter:ConsumerSecretкак параметры приложения в портале Azure. Система конфигурации настроена для чтения ключей из переменных среды.
Дополнительные ресурсы
ASP.NET Core