В этой статье подробно объясняется двухфакторная аутентификация, и как ее можно реализовать в .net 5 с использованием идентификационных структур, таких как IdentityServer4 и поставщик SMS (Twilio).

{{LINE_11}} Он содержит следующие разделы:

Что такое двухфакторная аутентификация?

Фактор в этом контексте подразумевает, как вы можете убедить приложение или услугу, что вы являетесь владельцем учетной записи. Имя пользователя/пароль широко используется в качестве наиболее распространенного фактора аутентификации. Тем не менее, из-за многих связанных с ним вопросов безопасности и недавних широко распространенных нарушений данных-однофакторная аутентификация стала менее безопасной. Двухфакторная аутентификация-это дополнительный уровень безопасности, который вступает в игру, прежде чем вы сможете получить доступ к своей учетной записи. Включение в стандартный процесс входа в систему-он вводит дополнительный шаг для проверки идентификации пользователя, отправив код (на вашу электронную почту или в виде текстового сообщения). Таким образом, ваша личность доказана, и только тогда доступ предоставляется.

Как работает 2FA?

В 2FA пароль по -прежнему является вашим первым фактором аутентификации, поэтому при входе в свою учетную запись он перенаправляет вас на другую страницу, где вам необходимо проверить владение учетной записью. Это можно сделать с помощью различных способов:

  1. Приложение отправляет код проверки, часто называемый OTP (одноразовые пароли) на ваш адрес электронной почты.
  2. Код доставлен в виде текстового сообщения на вашем телефоне.
  3. Вы устанавливаете приложение Authenticator на Mobile, через которое вы можете авторизовать запросы входа в систему. Примечание. Эти коды проверки генерируются случайным образом и истек после использования. Кроме того, они недолговечны - поэтому есть короткое окно, прежде чем вы сможете использовать код (это мешает хакеру грубо подчеркнуть коды проверки).

Можем ли мы назвать 2FA в качестве многофакторной аутентификации?

Методы аутентификации не ограничиваются двухфакторным. Многие приложения и услуги выдвигают своих пользователей за пределы 2FA и используют многофакторную аутентификацию. 2FA и MFA (многофакторная аутентификация) часто используются взаимозаменяемо. Однако есть разница. В многофакторной аутентификации используются два или более факторы. Он может проверить IP-адрес пользователя, геолокацию и информацию о устройстве в соответствии с другими факторами, такими как пароль и OTP, для проверки личности пользователя. Поэтому мы можем сказать, что 2FA является подмножеством MFA. В 2FA будет только два фактора, тогда как многофактор может использовать два или более фактора. MFA затрудняет хакеров, поскольку он добавляет несколько уровней безопасности в традиционном процессе аутентификации.

Есть ли недостатки с использованием 2FA?

Подобно многим решениям «безопасности и конфиденциальности», которые существуют в современных приложениях. Он также поставляется с ценой - неудобством, так как есть дополнительный шаг, который может вызвать трение в пользовательском опыте. Тем не менее, это принимается многими приложениями и услугами, поэтому этот компромисс становится приемлемым.

Как я могу реализовать аутентификацию 2FA?

В этом разделе мы узнаем, как реализовать 2FA в .net5, используя IdentityServer4 и Twilio. Итак, давайте создадим пробную учетную запись на Twilio:

  1. Зарегистрируйтесь на
  2. Проверьте свою учетную запись, предоставив действительный номер телефона. Как только ваша учетная запись будет проверена, вы можете использовать их консольную панель панели.
Twilio Dashboard
  1. Скопируйте свою учетную запись SID и Token Auth с приборной панели.
  2. Перейдите, чтобы купить номер, который вы будете использовать для отправки SMS/ Примечание: Twilio дает 15 $ Кредит во всех пробных счетах, которые вы будете использовать для покупки номера телефона.
Twilio - Поиск номера телефона

Вы можете выбрать любой номер, если он поддерживает «SMS -возможности». (Заметьте свой номер телефона, который мы будем использовать для настройки позже в нашем проекте). 5. Используя пробную учетную запись, Twilio позволяет отправлять SMS только проверенным идентификаторам абонента, которыми вы можете управлять по ссылке ниже: Это все, что вам нужно для настройки с использованием приборной панели Twilio. Давайте создадим веб -приложение ASP.NET Core Web (выберите шаблон проекта, как ниже, и Target .net5.

Visual Studio - новый проект

Теперь мы будем интегрировать IdentityServer4, Twilio Packages из Nuget.

  1. install -package IdentityServer4 -version 4.1.1
  2. 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

Config.cs class

Откройте startup.cs и добавьте следующие службы IdentityServer4 в методе ConfigServices:

  services.AddIdentityServer()
        .AddInMemoryIdentityResources(Config.GetIdentityResources())
        .AddTestUsers(Config.GetUsers())
        .AddInMemoryClients(Config.GetClients())
        .AddDeveloperSigningCredential();

Теперь добавьте IdentityServer в конвейер запроса:

app.UseIdentityServer();

Запустите проект и перейдите к _/Account/Login _

IdentityServer4 - вход в систему

Войдите в учетные данные, добавленные в config.cs После того, как IdentityServer настроен и работает. Затем мы можем добавить поддержку 2FA с помощью Twilio. Давайте добавим следующий класс:

  public class TwilioSettings
    {
        public string Sid { get; set; }
        public string Token { get; set; }
        public string From { get; set; }
     }

Этот класс конфигурации будет использоваться для внедрения настроек с использованием инъекции зависимости.

  1. Право, что говорится в проекте и добавьте секреты пользователя с конфигурацией Twilio (SID, Token, Phonenumber)
  2. Внедрять настройки в метод 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:

2FA в действии

Изменить метод учетной записи/входа для генерации и отправки кода проверки после проверки учетных данных. Мы не хотим выполнять запрос на знак в данный момент. Таким образом, будет удален вызов метода httpcontext.signinasync, и вместо этого мы просто создадим код случайной проверки и сохранили его (в настоящее время мы используем в памяти хранилище для демонстрационной цели).

[HttpPost]

[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model, string button)
Кодовый скриншот

И затем мы перенаправим пользователя на страницу «VerifyCode», где будет выполнена проверка кода, и будет завершен рабочий процесс входа. В действии VerifyCode мы просто получаем информацию о пользователе и коде из памяти и сопоставляем ее с предоставленным кодом.

Кодовый скриншот

Если код сопоставлен, мы просто заполнем запрос на аутентификацию, вызывая метод Signinasync и перенаправляем пользователя на авторизованную страницу. Давайте запустим проект Шаг -1: Пользователь предоставляет учетные данные.

2fademo - вход в систему

Шаг-2: учетные данные подтверждаются, а код проверки отправляется:

2fademo - смс

Шаг-3: пользователь проверяет правильный код.

2fademo - VerifyCode

Код шага 4 подтверждается, и аутентификация 2FA была завершена.

2fademo - авторизованная страница

Заключение:

В этой статье мы узнали о 2FA и его реализации в .net5 с использованием IdentityServer4 и Twilio. Вы можете скачать пример кода, используемый в этой статье из этой Repo. Использование SMS для 2FA, несомненно, укрепляет вашу безопасность, но оно все еще уязвимо для SIM -подменных атак. Таким образом, исследователи безопасности поощряют 2FA использовать другие подходы, такие как приложения Authenticator и ключи безопасности (Yubikey), которые нельзя перехватить в телефонной сети. Мы узнаем больше об этом в предстоящей статье - следите за обновлениями!