В этой статье подробно объясняется двухфакторная аутентификация, и как ее можно реализовать в .net 5 с использованием идентификационных структур, таких как IdentityServer4 и поставщик SMS (Twilio).
{{LINE_11}} Он содержит следующие разделы:
- Что такое двухфакторная аутентификация?
- Как работает 2FA?
- 2FA и многофакторная аутентификация
- Недостатки использования 2FA
- Реализация 2FA в .net5 Во -первых, давайте поймем, что такое 2FA и почему он должен быть неотъемлемой частью каждого современного веб -приложения.
Что такое двухфакторная аутентификация?
Фактор в этом контексте подразумевает, как вы можете убедить приложение или услугу, что вы являетесь владельцем учетной записи. Имя пользователя/пароль широко используется в качестве наиболее распространенного фактора аутентификации. Тем не менее, из-за многих связанных с ним вопросов безопасности и недавних широко распространенных нарушений данных-однофакторная аутентификация стала менее безопасной. Двухфакторная аутентификация-это дополнительный уровень безопасности, который вступает в игру, прежде чем вы сможете получить доступ к своей учетной записи. Включение в стандартный процесс входа в систему-он вводит дополнительный шаг для проверки идентификации пользователя, отправив код (на вашу электронную почту или в виде текстового сообщения). Таким образом, ваша личность доказана, и только тогда доступ предоставляется.
Как работает 2FA?
В 2FA пароль по -прежнему является вашим первым фактором аутентификации, поэтому при входе в свою учетную запись он перенаправляет вас на другую страницу, где вам необходимо проверить владение учетной записью. Это можно сделать с помощью различных способов:
- Приложение отправляет код проверки, часто называемый OTP (одноразовые пароли) на ваш адрес электронной почты.
- Код доставлен в виде текстового сообщения на вашем телефоне.
- Вы устанавливаете приложение Authenticator на Mobile, через которое вы можете авторизовать запросы входа в систему. Примечание. Эти коды проверки генерируются случайным образом и истек после использования. Кроме того, они недолговечны - поэтому есть короткое окно, прежде чем вы сможете использовать код (это мешает хакеру грубо подчеркнуть коды проверки).
Можем ли мы назвать 2FA в качестве многофакторной аутентификации?
Методы аутентификации не ограничиваются двухфакторным. Многие приложения и услуги выдвигают своих пользователей за пределы 2FA и используют многофакторную аутентификацию. 2FA и MFA (многофакторная аутентификация) часто используются взаимозаменяемо. Однако есть разница. В многофакторной аутентификации используются два или более факторы. Он может проверить IP-адрес пользователя, геолокацию и информацию о устройстве в соответствии с другими факторами, такими как пароль и OTP, для проверки личности пользователя. Поэтому мы можем сказать, что 2FA является подмножеством MFA. В 2FA будет только два фактора, тогда как многофактор может использовать два или более фактора. MFA затрудняет хакеров, поскольку он добавляет несколько уровней безопасности в традиционном процессе аутентификации.
Есть ли недостатки с использованием 2FA?
Подобно многим решениям «безопасности и конфиденциальности», которые существуют в современных приложениях. Он также поставляется с ценой - неудобством, так как есть дополнительный шаг, который может вызвать трение в пользовательском опыте. Тем не менее, это принимается многими приложениями и услугами, поэтому этот компромисс становится приемлемым.
Как я могу реализовать аутентификацию 2FA?
В этом разделе мы узнаем, как реализовать 2FA в .net5, используя IdentityServer4 и Twilio. Итак, давайте создадим пробную учетную запись на Twilio:
- Зарегистрируйтесь на
- Проверьте свою учетную запись, предоставив действительный номер телефона. Как только ваша учетная запись будет проверена, вы можете использовать их консольную панель панели.
- Скопируйте свою учетную запись SID и Token Auth с приборной панели.
- Перейдите, чтобы купить номер, который вы будете использовать для отправки SMS/ Примечание: Twilio дает 15 $ Кредит во всех пробных счетах, которые вы будете использовать для покупки номера телефона.
Вы можете выбрать любой номер, если он поддерживает «SMS -возможности». (Заметьте свой номер телефона, который мы будем использовать для настройки позже в нашем проекте). 5. Используя пробную учетную запись, Twilio позволяет отправлять SMS только проверенным идентификаторам абонента, которыми вы можете управлять по ссылке ниже: Это все, что вам нужно для настройки с использованием приборной панели Twilio. Давайте создадим веб -приложение ASP.NET Core Web (выберите шаблон проекта, как ниже, и Target .net5.
Теперь мы будем интегрировать IdentityServer4, Twilio Packages из Nuget.
install -package IdentityServer4 -version 4.1.1
install -package twilio -version 5.55.0
IdentityServer4 Quick UI доступен по адресу: Вы можете включить его в свой проект, запустив ниже команду в Developer Shell:iex ((new-object system.net.webclient) .downloadString ('https://raw.githubusercontent.com/identityserver/identityserver4.quickstart.ui/main/getmain.ps1'))
Если бы он был установлен правильно - вы бы увидели папку QuickStart в вашем проекте:
Давайте построим и запустим этот проект. Вы должны увидеть страницу приветствия, как показано ниже:
Этот шаблон использует хранилище данных в памяти, чтобы вы могли добавить своих тестовых пользователей в файл config.cs
Откройте startup.cs и добавьте следующие службы IdentityServer4 в методе ConfigServices:
services.AddIdentityServer()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddTestUsers(Config.GetUsers())
.AddInMemoryClients(Config.GetClients())
.AddDeveloperSigningCredential();
Теперь добавьте IdentityServer в конвейер запроса:
app.UseIdentityServer();
Запустите проект и перейдите к _/Account/Login _
Войдите в учетные данные, добавленные в config.cs После того, как IdentityServer настроен и работает. Затем мы можем добавить поддержку 2FA с помощью Twilio. Давайте добавим следующий класс:
public class TwilioSettings
{
public string Sid { get; set; }
public string Token { get; set; }
public string From { get; set; }
}
Этот класс конфигурации будет использоваться для внедрения настроек с использованием инъекции зависимости.
- Право, что говорится в проекте и добавьте секреты пользователя с конфигурацией Twilio (SID, Token, Phonenumber)
- Внедрять настройки в метод startup.cs ConfigureService.cs
var twilioSettings = Configuration.GetSection("TwilioSettings");
services.Configure<TwilioSettings>(twilioSettings);
Startup.cs был настроен. Теперь мы можем перейти к добавлению новой услуги под названием Authmessagesdender, которая будет нести ответственность за отправку SMS с использованием Twilio. Давайте создадим интерфейс, который будет реализовать Authmessagesdend.
public interface ISmsSender
{
Task SendSmsAsync(string number, string message);
}
Мы введем это в startup.cs.
services.AddTransient <ISmsSender, AuthMessageSender>();
SMS -отправляющий код довольно прост. Мы просто создаем клиент Twilio и вызываем метод MessagerSource.createAsync для отправки SMS.
public Task SendSmsAsync(string number, string message)
{
var sid = _twilioSettings.Value.Sid;
var token = _twilioSettings.Value.Token;
var from = _twilioSettings.Value.From;
TwilioClient.Init(sid, token);
MessageResource.CreateAsync(new PhoneNumber(number),
from: new PhoneNumber(from),
body: message);
return Task.FromResult(0);
}
Мы изменим метод входа в систему, чтобы проверить, включен ли пользователь 2FA, чтобы мы могли перенаправить их для проверки кода. Добавить verifycode.cshtml в QuickStart/Views:
Изменить метод учетной записи/входа для генерации и отправки кода проверки после проверки учетных данных. Мы не хотим выполнять запрос на знак в данный момент. Таким образом, будет удален вызов метода httpcontext.signinasync, и вместо этого мы просто создадим код случайной проверки и сохранили его (в настоящее время мы используем в памяти хранилище для демонстрационной цели).
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model, string button)
И затем мы перенаправим пользователя на страницу «VerifyCode», где будет выполнена проверка кода, и будет завершен рабочий процесс входа. В действии VerifyCode мы просто получаем информацию о пользователе и коде из памяти и сопоставляем ее с предоставленным кодом.
Если код сопоставлен, мы просто заполнем запрос на аутентификацию, вызывая метод Signinasync и перенаправляем пользователя на авторизованную страницу. Давайте запустим проект Шаг -1: Пользователь предоставляет учетные данные.
Шаг-2: учетные данные подтверждаются, а код проверки отправляется:
Шаг-3: пользователь проверяет правильный код.
Код шага 4 подтверждается, и аутентификация 2FA была завершена.
Заключение:
В этой статье мы узнали о 2FA и его реализации в .net5 с использованием IdentityServer4 и Twilio. Вы можете скачать пример кода, используемый в этой статье из этой Repo. Использование SMS для 2FA, несомненно, укрепляет вашу безопасность, но оно все еще уязвимо для SIM -подменных атак. Таким образом, исследователи безопасности поощряют 2FA использовать другие подходы, такие как приложения Authenticator и ключи безопасности (Yubikey), которые нельзя перехватить в телефонной сети. Мы узнаем больше об этом в предстоящей статье - следите за обновлениями!