Создание веб-приложения с двухфакторной аутентификацией на Angular 7


Оглавление (нажмите, чтобы открыть):

Создание веб-приложения с двухфакторной аутентификацией на Angular 7

Spring Framework можно назвать стандартом де-факто в мире Java. Еще бы, ведь некоторые концепции, реализованные в этом фреймворке повлияли на саму спецификацию JavaEE. Spring Security является дочерним проектом Spring, и предоставляет средства аутентификации и авторизации для Java/JavaEE приложений. С другой стороны, в мире фронтенда победил JavaScript и фреймворки, позволяющие создавать SPA веб-приложения — AngularJS, ReactJS, BackboneJS и другие. Я хочу привести пример, как можно успешно использовать Spring Security 4 совместно с Angular. В этом примере мы напишем REST бекенд, используя Spring MVC. Также мы реализуем аутентификацию и авторизацию с помощью Spring Security, в то время как на фронтенде будет использоваться AngularJS.

В целом, пример больше всего ориентирован на backend составляющую. Используя описанный принцип, можно аналогично использовать какой-нибудь другой фреймфорк для фронтенда (например Angular 2). Итак, нашей целью будет создать веб-приложение с несколькими разделами — открытый раздел и два защищенных раздела, в которые имеет доступ только авторизованный пользователь. Все должно работать через AJAX и должна быть функция «запомнить меня».

В примере будет использоваться Java 8, Tomcat 8, Spring 4.3, Spring Security 4.1, AngularJS 1.4.9. В конце поста вы можете найти ссылку на полный код проекта.

REST backend.

Начнем с бекенда. Проект собирается с помощью Maven и имеет такую структуру:

В директории webapp/resources будет расположено одностраничное приложение Angular. К его рассмотрению перейдем чуть позже. Структура пакетов Java выглядит следующим образом:

Аутентификация через AJAX запрос.

В пакете org.develnotes.web находятся два контроллера Spring MVC. HomeController — контроллер, который при переходе на веб-контекст приложения перенаправляет пользователя на страницу index.html, где и расположено наше Angular приложение. HomeController.java:

LoginController — контроллер отвечающий за аутентификацию. LoginController.java:

Здесь расположены метод получения данных пользователя getUser и метод logout, с помощью которого осуществляется выход из системы. Метод getUser имеет два назначения — с одной стороны это получение данных пользователя по AJAX запросу, а с другой — аутентификация пользователя. Посмотрим как это работает. Поскольку задачей является создание одностраничного приложения, где роутинг между различными представлениями (разделами веб-приложения) будет реализован на фронтенде, мы не можем использовать аутентификацию основанную на формах, как это обычно делается при использовании Spring Security. Вместо этого, необходимо использовать HTTP basic аутентификацию. Что это значит? Это значит, что при каждом HTTP запросе к защищенному ресурсу, сервер будет ожидать получить в заголовке запроса данные для аутентификации. Для включения HTTP basic аутентификации, добавим в секцию http в spring-security.xml:

Обратите внимание на свойство entry-point-ref. Мы указали бин http403ForbiddenEntryPoint. Этот бин (он создается в SpringSecurityBeans.java) отвечает за то, чтобы при обращении клиента к защищенному ресурсу, в случае отсутствия аутентификации, сервер возвращал HTTP статус 403 Forbidden. По умолчанию, сервер будет возвращать в ответе статус 401 Unauthorized. Проблема в том, что большинство браузеров, получив в такой ответ от сервера (в том числе при AJAX запросе), показывают пользователю диалог ввода логина и пароля. Например, в Google Chrome это выглядит так:

Подобное диалоговое окно контролируется браузером и убрать его невозможно. Нам это окно совершенно не нужно, у нас будет собственный диалог ввода логина и пароля, поэтому ответ 403 в данном случае отлично подходит т.к. для него браузер не выдает таких диалоговых окон. Итак, когда клиент делает GET запрос по адресу user происходит следующее:

1. Если в запросе нет заголовка аутентификации, или переданы неверные логин и пароль, метод не возвращает данных пользователя и клиент получает HTTP ответ со статусом 403.

2. Если в запросе передан корректный заголовок аутентификации, Spring Secruty аутентифицирует пользователя и подставляет в аргумет principal метода getUser(Principal principal ) данные пользователя. Клиент получает HTTP ответ со статусом 200, в котором содержаться данные пользователя в JSON.

Таким образом, для того чтобы войти в систему нужно сделать AJAX запрос по адресу user, предоставив данные для входа (логин и пароль). Это работает благодаря включению в Spring Security точки входа HTTP basic, и конфигурированию authentication-manager в spring-security.xml:

Здесь мы указываем, что пароль хранится не в открытом виде, а ввиде хэша bcrypt. Также здесь указана ссылка на сервис, который предоставляет данные пользователя — userDetailsServiceStub. Этот бин типа UserDetailsServiceStub, который реализует интерфейс org.springframework.security.core.userdetails.UserDetailsService:

Класс UserDetailServiceStub реализует метод loadUserByUsername, который загружает пользователя по его логину. В данном случае это сервис «заглушка», который может вернуть только одного пользователя с логином user. Если логин передан верно, то мы создаем пользователя, и заполняем нужные данные — логин, хэш пароля, роль пользователя в системе и некоторые дополнительные данные, которые нужны для примера. В реальном же проекте данные о пользователях скорее всего будут получаться из БД. В нашем примере не будет сложной авторизации, а будет только одна роль — ROLE_USER. Пользователь с этой ролью сможет смотреть закрытые разделы. Для представления данных пользователя, мы будем использовать собственную реализацию интерфейса UserDetails. User.java:

Необходимость собственной реализации (а не использование стандартного класса из пакетов Spring) обсусловлена двумя причинами: для примера мы добавим дополнительные поля — страна и полное имя; мы будем использовать этот класс для сериализации в JSON и ограничим сериализацию списка ролей пользователя с помощью аннотации @JsonIgnoreProperties(<"authorities">).

Кроме метода user, в LoginController.java есть метод logout. Когда клиент отправляет AJAX POST запрос, сессия очищается и пользователь выходит из системы. Необходимость создания своего метода выхода обсусловлена тем, что стандартный logout (если его включить в spring-security.xml) в ответ направляет редирект на заданную страницу, а нам, в связи со спецификой работы Angular, такое поведение не подходит. Мы реализовали аутентификацию и выход из системы с помощью AJAX запроса. Теперь необходимо настроить защиту от CSRF атак, и сделать возможность сохранения логина и пароля в cookies браузера (галочка «запомнить»).

Настройка CSRF токена.

В Spring Security 4 по умолчанию включена защита от атак типа CSRF. Суть идеи заключается в том, что вместе с запросом клиент отправляет заголовок, в котором содержится CSRF токен (неплохая статья на эту тему).

Для того чтобы все это работало с Angular, необходимо произвести настройку. В классе SpringSecurityBeans.java создадим бин customCsrfTokenRepository:

Также создадим бин customCsrfHeaderFilter. CustomCsrfHeaderFilter.java:

После чего эти бины нужно включить в spring-security.xml в секцию http:

Созданный нами фильтр включается после фильтра CSRF_FILTER. Создание собственного фильтра и бина customCsrfTokenRepository необходимо, потому что Angular по умолчанию ищет cookie с именем XSRF-TOKEN и добавляет в запрос заголовок с именем X-XSRF-TOKEN. Таким образом, мы обеспечили корректную связь механизмов защиты от CSRF атак Spring Security и Angular.

Сохранение логина и пароля.

Для того, чтобы пользователю не нужно было каждый раз вводить логин и пароль, достаточно часто используется функция «запомнить», которая может быть реализована несколькими способами. В этом примере, мы будем использовать сохранение данных в cookies браузера. Cookies будут формироваться на стороне клиента, если пользователь выберет опцию «запомнить» при входе в систему, и будут иметь срок действия один месяц. О том, как они будут формироваться — посмотрим при написании клиентской части. А пока посмотрим что нужно сделать на бекенде. Первым делом нужно создать бин rememberMeServices в классе SpringSecurityBeans:

Затем укажем ссылку на этот бин в spring-security.xml в разделе http:

Cookie с именем DEVELNOTES_REMEMBER_ME_COOKIE будут создаваться на фронтенде, при входе пользователя в систему, в том случае, если он выбрал опцию «Запомнить». Когда такие cookie будут переданны с запросом, Spring Security будет осуществлять аутентификацию именно по ним. Таким образом, пользователю не нужно будет вводить логин и пароль.

Теперь необходимо указать Spring Security страницы, которые нужно закрыть. Для этого добавим тег intercept-url с указанием паттерна /resources/partials/protected/*. В директории protected будут лежать закрытые страницы, которые будут запрашиваться AngularJS с помощью AJAX. После выполненения всех настроек, spring-security.xml будет выглядеть так:

С бекендом разобрались, теперь необходимо поработать над форнтендом.

Создаем приложение AngularJS.

Веб-приложение Angular будет расположено на странице index.html, на которую будет осуществляться переход (см. HomeController.java):

В директории webapp/resources/js лежат скрипты, необходимые для Angular, само наше приложение — app.js, и md5.min.js — реализация алгоритма MD5, которая понадобится нам для создания Cookie DEVELNOTES_REMEMBER_ME_COOKIE. На странице index.html подключим необходимые скрипты и добавим ng-view:

Также обратите внимание на функцию getContextPath(), она должна строку адреса вместе с веб-контекстом приложения. Если вы будете запускать пример на Tomcat 8 через Eclipse, то веб-контекстом будет являться имя проекта, т.е. SpringAngular. Таким образом, функция getContextPath() вернет адрес http://localhost:8080/SpringAngular.

В файле app.js создадим три контроллера. HomeController — контроллер общедоступного раздела, SanctumController — контроллер закрытого раздела, LoginController — контроллер представления для ввода логина и пароля:

Как видно, все контроллеры будут использовать сервис authService. Этот сервис реализует следующие функции:

authenticate(name, password, remember, callback) — функция аутентификации пользователя по логину и паролю. Если будет передан аргумент remember = true, то будут созданы cookie для последующей аутентификации пользователя без ввода логина и пароля («запомнить»). Cookie должны создаваться в формате, описанном в документации Spring Security. В случае успешного входа пользователя в систему, будет вызвана функция callback с аргументом true.

getUserInfo(callback) — функция получения данных текущего пользователя (вся доступная информация для аккаунта). Должна вызваться только после входа пользователя в систему. В случае успеха вызовет функцию callback с данными пользователя.

logout() — выйти из системы.

createRememberMeCookie(userdetails) — создать cookie для последующей аутентификации пользователя без ввода логина и пароля. Эта функция использует md5.min.js для создания cookie в формате, описанном в документации Spring Security.

removeRememberMeCookie() удаляет cookie, которые были созданы функцией createRememberMeCookie.

После контроллеров создаем модуль mainModule, добавляем в него сервис authService и контроллеры:

Кроме создания описанного выше сервиса authService, здесь настраивается роутинг с помощью $routeProvider, а также добавляется интерсептор для $httpProviderresponseObserver. Этот интерсептор нужен для перенаправления пользователя на раздел ввода логина и пароля, в том случае, если пользователь не вошел в систему, но осуществил переход на закрытую страницу.

Все готово, запустим приложение на Tomcat. При переходе на http://localhost:8080/SpringAngular, произойдет перенаправление на страницу index.html, на которой мы увидим список разделов:

На странице есть две ссылки на закрытые разделы — Профиль и Фотографии. Попробуем нажать на Профиль:

Не смотря на то, что ссылка указывала на раздел профиля, произошло перенаправление на #login. Это работает благодаря интерсептору, который был добавлен в приложение AngularJS. После ввода правильного логина и пароля (имя user и хэш пароля qwerty сохранены в UserDetailsServiceStub.java), мы попадаем в профиль пользователя:


При переходе назад, на Главную страницу, можно увидеть что на ней появилась ссылка Выход:

Если при входе в систему выбрать опцию «Запомнить», то при последующем переходе на закрытые разделы, ввод логина и пароля не потребуется. Например, откроем браузер заново, и сразу перйдем на раздел Фотографии (выбрав предварительно опцию «Запомнить»):

Теперь попробуем сделать следующее. Скопируем адрес фотографии и выйдем из системы, нажав Выход. Теперь попробуем открыть эту фотографию напрямую по URL:

Все работает как нужно! Ресурсы, которые находятся в папке protected действительно закрыты от несанкционированного доступа.

Angular + Web API: Как создать Angular-приложение на ASP.NET MVC 5 без использования MVC 5

ru-RU | создано: 04.07.2020 | опубликовано: 04.07.2020 | обновлено: 02.08.2020 | просмотров за всё время: 4250

В этой краткой статье покажу и расскажу как запусть Angular на Web API (OWIN), то есть на ASP.NET MVC5 без использования самого MVC5. То есть в вашем распоряжении будет только API-контролеры, а всё остальное останется за бортом.

О чем

Наверное вы уже знаете, что для создания проекта на Angular можно использовать интерфейс командной строки (англ. Command Line Interface, CLI). И что при использовании данного способа создается проект который использует http-сервер на основе node.js. Существует и другой способ создать проект приложения на Angular, который использует dotnet, то есть платформу ASP.NET Core. Я бы хотел предложить вам другой способ, который базируется на использовании ASP.NET MVC 5. Наверняка вы сможете мне возразить, что это общеивестный способ — запускать Visual Studio, выбирай Web API и создавай через CLI новое приложение Angular. На это могу сказать следующее. Создать SPA на ASP.NET MVC 5 у вас конечно же получится, а вот избавиться от MVC 5 (контролеры, razor и прочие ненужные ненужности) это не так-то просто. Я немного устал заниматься этим неблагодарным делом и поэтому создал простой и, на мой взгляд, очень полезный nuget-пакет, который существенно облегчит эту задачу.

Создаем проект Angular на Web API

Создаем новый проект на Visual Studio.

Выбираем следующие настройки:

Главное, что не надо подключать каких-либо других папок (folders). Нажием Ok. У нас получился такой расклад в папках проекта:

Следующим этапом будет установка nuget-пакета, того самого о котором шла речь в начале статьи.

Обратите внимание, что установку можно выполнить и при помощи UI (правой кнопкой клик на корне проекта -> Manage Nuget packages. ), но использую установку через Package Manager Console:

После окончания установки появятся папки и файлы:

Уже можно запускать проект, но перед этим надо проверить что настройки проекта для старта выставлены правильно:

Выберите этот параметр если он не выбран, поле надо оставить пустым. После этого можно стартовать проект — нажимаем F5:

Запустился и работает. Это содержание файла Index.html, который лежит в папке App нашего проекта. А также нам уже доступены данные Api-контролера ValuesController, который находится в папке Controllers. Попробуйте выполнить запрос:

Дальше надо открыть Command Prompt или PowerShell из корневой папки нашего проекта. Я использую PowerShell чтобы выполнить команду создания проекта Angular:

Значит у нас есть статичный файл и действующий Web API, где ng = среда CLI для Angular, new — команда создать новый проект, а ngapi — название проекта (папка также будет называться), который будет создан. После того как команда отработает, а на это потребуется какое-то время вы увидите результаты ее работы:

Мастер Йода рекомендует:  Хитрые приёмы на Python

Чтобы увидеть в Visual Studio новые файлы надо включить опцию «просмотр скрытых файлов и папок»:

Наверняка у вас в папке ngapi появится и папка .git, я ее удалил, потому что собираюсь весь проект положить в GIT. Теперь можно включить в проект нажные нам файлы. Обязательно исключите из списка нужных папку node_modules.

Теперь давайте поправим название папки, куда Angular будет кладывать скомпилированные файлы проекта. Для этого откроем Angular.json и изменим параметр outputPath. Я удалил лишнюю папку в пути:

Теперь перейдите в папку ngapi. Для этого можно выполнить команду cd ngapi или sl ngapi:

А теперь дайте команду Angular чтобы он «собрал» проект. Для этого надо выполнить команду ng build:

По завершению выполнения команды количество ошибок должно быть меньше 1:

В нашем проекте появилась новая папке dist. Чтобы ее увидеть обновите Solution Explorer.

Как установить и использовать приложение Google Authenticator

В инструкции описан процесс установки приложения Google Authenticator на различные мобильные операционные системы (Android, iOS, Windows Phone) и в качестве расширения веб-браузера, а также его использование при подключении к панели управления.

Содержание:

Что это такое?

Google Authenticator обеспечивает двухфакторную аутентификацию (2FA). 2FA — дополнительный уровень безопасности, используемый для подтверждения пользователей, пытающихся получить доступ к онлайн-учетной записи. Сначала, пользователь вводит свои логин и пароль. Затем, вместо того, чтобы немедленно получить доступ, он должен будет предоставить другую информацию, например:

  • дополнительные сведения (персональный идентификационный номер (ПИН), пароль, ответы на «секретные вопросы» или конкретная последовательность нажатия клавиш);
  • подтверждение владения (как правило, пользователь имеет что-то в своем распоряжении, например, кредитную карту, смартфон или небольшой аппаратный токен);
  • биометрические данные (эта категория немного более продвинута и может включать биометрический рисунок отпечатка пальца, сканирование диафрагмы или голосовую печать).

Таким образом, даже если у вас украден пароль или потерян телефон, вероятность того, что кто-то другой получит доступ к вашей информации маловероятен.

Установка Google Authenticator на Android

Для установки приложения на операционную систему Android достаточно просто скачать его в магазине GooglePlay.

После установки на первой странице нажмите Начать.

При желании вы можете настроить 2FA в своем аккаунте Google, если в этом нет необходимости, то нажмите Пропустить.

Теперь можно перейти к добавлению аккаунта. Доступно два способа: сканировать штрихкод и ввести ключ. Наиболее удобным является сканирование — перед вами откроется камера, где в выделенный квадрат необходимо поместить QR-код, который будет распознан автоматически, а аккаунт сразу добавлен.

Установка Google Authenticator на iOS

Для установки приложения на операционную систему iOS также достаточно скачать его в AppStore.

После установки откройте приложение и нажмите Приступить к настройке.

Можно перейти к добавлению аккаунта. Доступно два способа: сканировать штрихкод и ввести ключ. Наиболее удобным является сканирование — перед вами откроется камера, где в выделенный квадрат необходимо поместить QR-код, который будет распознан автоматически, а аккаунт сразу добавлен.

Установка Google Authenticator на Windows Phone

Использование аутентификатора на Windows Phone возможно только благодаря Google-совместимых приложений, например Authenticator+. Также у Microsoft есть собственное приложение Microsoft Authenticator.


Рассмотрим установку приложения Authenticator+, для установки этого достаточно скачать его в магазине приложений Microsoft.

После установки можно открыть приложение и перейти к добавлению аккаунта. Доступно два способа: сканировать штрихкод и ввести ключ. Наиболее удобным является сканирование — перед вами откроется камера, где в выделенный квадрат необходимо поместить QR-код, который будет распознан автоматически, а аккаунт сразу добавлен.

Установка Google Authenticator в Google Chrome

Использование аутентификатора на компьютере возможно только благодаря совместимым приложениям. Например: Authenticator for Windows, эмулятор Nox App Player, WinAuth, на Linux доступен libpam-google-authenticator.

В инструкции рассмотрен наиболее удобный способ — подключение расширения в веб-браузере Chrome.

Чтобы установить расширение, откройте интернет-магазин Chrome и найдите приложение Authenticator.

После этого вы будете перенаправлены на страницу разработчика на Github. Расширение появится в вашем браузере в правом верхнем углу. Для добавления аккаунта нажмите на Карандаш, а затем на Плюс.

Здесь также доступно два способа: сканировать штрихкод и ввести ключ. В первом случае необходимо сделать скриншот части экрана с QR-кодом. Во втором — нужно ввести секретный ключ вручную.

Использование приложения Google Authenticator для подключения к панели управления

После установки приложения на вашу систему откройте в панели управления раздел Настройка профиля -> Безопасность. На открывшейся странице выберите Двухфакторную аутентификацию через приложение.

Перед вами откроется QR-код. Далее в приложении Google Authenticator выберете сканирование штрихкода. После того как откроется камера, поместите штриход в выделенный квадрат на экране приложения, который будет распознан автоматически. В приложении создастся шестизначный код, который необходимо указать.

После ввода кода вы увидите, что двухфакторная аутентификация подключена через приложение.

Теперь для входа в панель управления необходимо указать код из приложения.

Отключение двухуровневой аутентификации для входа в панель управления

Для отключения опции Двухфакторная аутентификация в панели управления перейдите в раздел Настройка профиля -> Безопасность. Чтобы ее отключить нажмите Отключить.

JWT авторизация angular 7

Подскажите, как лучше работать с данными пользователя при авторизации? Записывать какие-то данные о нем в localStorage и брать оттуда или хранить данные о пользователя в сервисе?

И побочный вопрос. Как на клиенте проверять время истечения токена? У меня пришла идея искать 401 ответы, но мне кажется это что-то не то.

1 ответ 1

Использовать cookie

С jwt самый простой вариант — это использовать куки. Плюсом куки будет то что можно установить когда они истекут. Соответсвенно решить вопрос их валидации по времени. Создать на сервере токен, записать на сервере в куку с датой просрочки. Клиенту, в таком случае, вообще ничего не надо делать.

Использовать sessionStorage

После авторизации записать токен в sessionStorage и пока вкладка будет жить, будет жить и токен. И, конечно, в другой вкладке токена не будет, и, соответсвенно, клиент авторизирован не будет.

localStorage

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

Выбираем android-приложение для двухэтапной аутентификации в сервисах: «Яндекс.Ключ», FreeOTP Authenticator, а также итоги рассмотрения пяти приложений

Оглавление

Вступление

реклама

Теперь же мы с вами поговорим об отечественном аутентификаторе – «Яндекс.Ключе», призванном заменить Google Authenticator. Приложение интересно выглядит, предлагает два вида авторизации и собственную защиту. Однако не будем заранее ставить ему положительные оценки и проверим все досконально.

Вторым участником выступит FreeOTP Authenticator – программа с открытым исходным кодом, которая в свою очередь может стать эталоном для подобных решений. Но это только первые предположения, так что не будем ходить вокруг да около и начнем.

В качестве тестового оборудования использовались планшет DEXP Ursus 8EV2 3G (Android 4.4.2, процессор MT8382, 4 x Cortex-A7 1.3 ГГц, видеоядро Mali-400 MP2, 1 Гбайт ОЗУ, аккумулятор 4 000 мАч, 3G-модуль, Wi-Fi 802.11b/g/n) и смартфон Homtom HT3 Pro (Android 5.1 Lollipop, процессор MT6735P, 4 x Cortex-A53 1.0 ГГц, 64-бит, видеоядро Mali-T720, 2 Гбайт ОЗУ, аккумулятор 3 000 мАч, 4G-модуль, Wi-Fi 802.11b/g/n)

реклама

«Яндекс.Ключ»

Знакомство

«Это аутентификатор, который создает одноразовые пароли (OTP) для входа на Яндекс, Facebook, Google, GitHub, Dropbox, ВКонтакте и другие сервисы, которые поддерживают двухфакторную аутентификацию (2FA). На Яндексе вы будете вводить созданный «Ключом» пароль вместо обычного пароля, а на других сервисах – вместе с обычным».

Описание в Google Play говорит само за себя и добавить особо нечего, разве что тот факт, что некоторые пользователи предпочитают это приложение Google Authenticator.

Оценка в Google Play

4.2

Разработчик

Яндекс

Количество загрузок в Google Play

100 000-500 000

Совместимость приложения с другими версиями ОС Android

4.0 или более поздняя

Размер приложения в установленном состоянии

18.3 Мбайт

Версия приложения

2.3

Покупки в приложении

Основные функции:

  • Четырехзначный PIN-код.
  • Защита данных.
  • Работа офлайн.
  • Простое подключение. Добавлять аккаунты в приложение можно вручную, перепечатав данные с сайта сервиса, который вы подключаете, или автоматически – считав оттуда QR-код.
  • Программа умеет создавать шестизначные и восьмизначные пароли в зависимости от требований сервиса. Кроме того, она поддерживает разные периоды обновления одноразовых паролей, не только 30 секунд (это зависит от используемого сервиса).
  • «Яндекс.Ключ» подходит для двухфакторной аутентификации на всех сервисах, поддерживающих стандарты защиты RFC 6238 и RFC 4226 (кроме тех, которые работают только с SMS).

Идентификационные данные:

  • Поиск аккаунтов на устройстве;
  • Добавление/удаление аккаунтов.

Контакты:

  • Поиск аккаунтов на устройстве.

Камера:

  • Фото- и видеосъемка.

Другое:

  • Просмотр сетевых подключений;
  • Создание аккаунтов и установка паролей;
  • Неограниченный доступ к Интернету;
  • Использование аккаунтов на устройстве;
  • Управление функцией вибросигнала.


Первое впечатление

реклама

При первом запуске «Яндекс.Ключа» нам сразу предлагают добавить аккаунт в приложение. Для этого достаточно считать QR-код (считывается без проблем) или добавить его вручную, вбив логин и секретный ключ.

Напомню, для того чтобы двухэтапная аутентификация заработала, ее сначала надо активировать через веб-сервис, например, Google или Яндекс.

реклама

Настройки программы находятся в правом верхнем углу и предполагают создание мастер-пароля, который работает лишь на устройстве. Если вы его забудете, то восстановить будет нельзя, а одноразовые пароли перестанут работать.

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

реклама

И поскольку программа сразу берет быка за рога, а настройки, первое впечатление и сам процесс проверки работоспособности объединились в один подраздел, то сразу перейдем к тестированию нагрузки на систему.

реклама

Нагрузка на систему

Оная меня откровенно порадовала – максимально задействовано 40 Мбайт ОЗУ при 0.1% на процессоре. Правда, аккумулятор проседает на 16% (скорость энергопотребления равна 22.5 мВт), а основная нагрузка приходится именно на процессор, который пожирает энергию.

Неужели генерация QR-кода или одноразового пароля требует от CPU особых усилий? Вряд ли, скорее всего, корень проблемы кроется в использовании камеры и создании нагрузки на видеоядро. «Система-на-чипе», как она есть.

реклама

«Яндекс.Ключ» совместим только с четвертой ОС Android или выше, весит в системе 18.3 Мбайт, не содержит рекламы, распространяется бесплатно и не предполагает встроенных покупок. В разрешениях нет ничего криминального и их, как ни странно, самый минимум.

Выводы

Лично мне «Яндекс.Ключ» показался самым оптимальным из всех ранее рассмотренных приложений. Настраивается программа без проблем, поддерживает большинство необходимых сервисов и основную свою функцию выполняет на ура. Проблем с считыванием QR-кода, как это было у Google Authenticator, не возникало.

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

Содержание статьи

Профиты многофакторной аутентификации для корпоративных приложений

  1. Более надежная аутентификация, чем только имя пользователя и пароль. К «что-то, что я знаю» (логин/пароль) добавляется «что-то, чем обладаю» — физическое устройство, а проверить, владеет ли им данный пользователь, позволяет код в СМС, отправленной на это устройство, или звонок на него с запросом пин-кода.
  2. Удобное управление настройками подобной системы аутентификации — включение/выключение разной степени защиты для разных пользователей, настройка различных политик и способов работы дополнительных факторов аутентификации.
  3. Возможность использовать учетные данные корпоративной инфраструктуры для входа в приложения, а не создавать новые логины и пароли для приложения в дополнение к корпоративным.

Мы рассмотрим реализацию этой задачи с помощью следующих продуктов и технологий:

  • Azure Active Directory — облачный сервис многофакторной аутентификации;
  • Azure Active Directory Authentication Libraries (ADAL) — библиотеки, обеспечивающие вызовы сервисов многофакторной аутентификации, включая проверки сертификатов, защищенное соединение с облачным сервисом аутентификации, отображение необходимых диалогов аутентификации. Поддерживает множество платформ и языков программирования;
  • Xamarin Forms — кросс-платформенное средство создания мобильных приложений, обеспечивающее компиляцию в нативный код и стопроцентный доступ к нативным API. Особенно удобно для быстрого создания приложений с переиспользованием 80–90% и более исходного кода между iOS, Android, Windows UWP — как раз наш случай для данного примера. Xamarin доступен как бесплатная часть Microsoft Visual Studio во всех ее версиях, включая бесплатную Visual Studio Community Edition.

Также с помощью Active Directory Federation Services (ADFS) и их интеграции с Azure Active Directory мы можем использовать для многофакторной аутентификации корпоративные учетные записи и пароли внутреннего домена Active Directory, но основной упор в этой статье сделаем на первые две задачи. ADFS будет опциональной задачей, так как, если нам не нужна интеграция с локальным доменом Active Directory, мы можем создать учетные записи вручную непосредственно в сервисе Azure Active Directory.

Начнем с настройки Azure Active Directory: если у нас нет учетной записи и доступа к Microsoft Azure, можем легко получить бесплатную пробную учетную запись здесь. В рамках пробной подписки большое число сервисов предоставляется бесплатно на год. В целом все, что описано в данной статье, ты можешь попробовать бесплатно.

Регистрация мобильного приложения для доступа к Azure Active Directory

Первым шагом мы регистрируем мобильное приложение в Azure Active Directory для того, чтобы получить доступ к сервису. Фактически мы создаем учетную запись приложения с определенными идентификаторами и настройками безопасности. Только мобильное приложение, которое через защищенное соединение сможет предъявить данные идентификаторы, получит доступ к службе аутентификации.

Зайдя на портал Azure, в самой левой черной панели служб выбираем службу Azure Active Directory (или нажимаем All Resources и пользуемся поиском служб), переходим в подраздел App registrations и регистрируем новую учетную запись приложения, нажимая New application registration.

New App Registration

Заполняем поля новой учетной записи приложения:

  • Name — любое имя, по которому потом нам самим будет понятно, о каком приложении речь;
  • Application Type — выбираем Native, так как у нас будет мобильное приложение, а не веб-сервис;
  • Redirect URI — это фактически идентификатор, который должен обязательно совпадать в настройке учетной записи приложения на стороне сервиса с настройкой на стороне клиента. Это может быть любой произвольный URI (произвольная строка в формате URI) — он не должен быть обязательно реальным хостом и не должен быть зарегистрирован в DNS.

New App Registration Form

Нажимаем Create и получаем новую учетную запись приложения с автоматически назначенным системой идентификатором, который называется APPLICATION ID.

New App Registration Completed

Это очень важный идентификатор — его обязательно должно передать мобильное приложение вместе с совпадающим с настройкой сервиса Redirect URI, чтобы получить доступ к службе аутентификации.

Создание пользователя и включение многофакторной аутентификации

Теперь мы создадим пользователя, пароль и включим для него многофакторную аутентификацию.

Напомню, что, если есть задача использовать учетные записи, уже существующие в организации в локальном домене Active Directory, это можно сделать с помощью службы Active Directory Federation Services. Тогда нам не нужно будет заводить пользователей, можно будет настраивать многофакторную аутентификацию для уже существующих в домене пользователей, и при входе в мобильное приложение они будут использовать свои доменные логины и пароли.

То есть при использовании AFDS получится такая топология:

Мы же продолжим базовый сценарий, который не требует наличия домена Active Directory и настройки службы ADFS, и заведем пользователя самостоятельно в Azure Active Directory.

Заходим в знакомый раздел Azure Active Directory → Users and groups → All users и нажимаем New user.


Далее заполняем информацию о пользователе. Обрати внимание на User name: если у тебя в подписке Azure сконфигурировано свое доменное имя — используй его, если нет — система автоматически сгенерирует доменное имя в алиасе пользователя по принципу [логин нашей учетной записи Azure].onmicrosoft.com. Для целей тестирования этого достаточно, для производственных систем, очевидно, мы пропишем в подписке Azure свой более симпатичный домен. Также придумываем и прописываем пароль. На скриншоте подчеркнут автоматически сгенерированный домен для моей пробной подписки.

Нажимаем Create и получаем новую учетную запись пользователя.

Теперь включим для нее многофакторную аутентификацию. Заходим в раздел All users и нажимаем кнопку Multi-Factor Authentication.

Multi-Factor Authentication Button

Дальше мы попадаем в настройки многофакторной аутентификации, выбираем нужного пользователя и нажимаем Enable.

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

На стороне сервиса все готово — данный пользователь теперь будет аутентифицироваться многофакторно. Если хочется изменить настройки сервиса, можно зайти в раздел Service settings — сразу под надписью Multi-factor authentication на предпоследнем экране выше.

Здесь есть, например, интересный раздел, который задает, какие методы дополнительных «факторов» доступны пользователю.

Здесь можно настроить звонок либо СМС на телефон или подтверждение через мобильное приложение Microsoft Authenticator.

Конфигурирование сервиса Azure Active Directory завершено, теперь создадим мобильное приложение и интегрируем в него многофакторную аутентификацию.

Интеграция многофакторной аутентификации в мобильное приложение

Как я сказал выше, мы для примера возьмем Xamarin Forms (бесплатная часть Visual Studio), который позволит нам, переиспользуя большую часть кода, получить сразу нативные мобильные приложения с поддержкой многофакторной аутентификации для iOS, Android и Windows UWP.

Быстрый способ — используем готовый исходный код

  1. Забираем код из моего репозитория на GitHub.
  2. Прописываем в код приложения в файле MainPage.xaml.cs идентификаторы, которые мы сконфигурировали при регистрации приложения в облачном сервисе Azure Active Directory. Их полное соответствие в приложении и сервисе необходимо, чтобы сервис не отклонял обращения приложения.

clientID — это Application ID из наших настроек облачного сервиса выше.

returnURI — это Redirect URI из наших настроек облачного сервиса выше.

Все готово. Теперь мы рассмотрим также создание приложения с нуля.

Детальный способ — создаем приложение с нуля

Запускаем Visual Studio (я сейчас использую VS 2020, версия 15.6.7) с установленным Xamarin. Это можно проверить, запустив Visual Studio Installer и нажав Modify текущей инсталляции Visual Studio.

Xamarin входит во все версии Visual Studio — даже в бесплатную Community Edition, но нужно убедиться, что он включен и установлен, как показано выше.

Запускаем Visual Studio и создаем новый проект: меню File → New → Project. Выбираем Cross-Platform → Mobile App (Xamarin.Forms).

Далее выбираем Blank App и .NET Standard как Code Sharing Strategy.

Получив новый проект, проверим запуск мобильного приложения, по умолчанию стартовый проект выделен жирным шрифтом — Android-приложение.

Если это не так, сделаем его стартовым: правый клик на проекте App.Android и меню Set as a StartUp Project.

Нажав F5, запустим приложение на эмуляторе Android и увидим:

Убедившись, что все работает, останавливаем отладку (Shift + F5).

Чтобы интегрировать многофакторную аутентификацию, подключим библиотеку Azure Active Directory Authentication Libraries (ADAL). Подключить ее надо будет к каждому проекту: правый клик на каждом проекте — всего четыре проекта (общий + специфичный под каждую из трех платформ) = 4 раза → Manage NuGet Packages.

Далее закладка Browse — вводим в поиск adal и подключаем, нажимая на кнопку со стрелкой вниз.

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

  • в общем проекте определим интерфейс IAuthenticator, через который будем вызывать аутентификацию из общего кода;
  • в каждом из платформенных проектов определим специфичную для конкретной платформы реализацию взаимодействия аутентификации с пользовательским интерфейсом этой платформы;
  • используя DependencyService, доступный в Xamarin Forms, мы сможем при вызове единого метода Authenticate интерфейса IAuthenticator из общего кода автоматически использовать именно ту реализацию под конкретную платформу, на которой в данный момент запущено приложение.

Начинаем с определения интерфейса IAuthenticator в общем для всех платформ проекте, создаем в нем новый файл IAuthenticator.cs с определением интерфейса (правый клик на проекте → Add → New Item → Class).

Как видишь, мы определяем сигнатуру асинхронного метода аутентификации. AuthenticationResult при успешной аутентификации будет содержать полученный от Azure Active Directory токен. Соберем проекты: правый клик на Solution → Build Solution.

Теперь создаем реализацию этого интерфейса для каждой из платформ. Он будет очень похож — основываться на вызове метода AcquireTokenAsync; единственное различие, почему его, собственно, и приходится создавать платформенно-зависимым, в специфике интеграции с платформенным UI через PlatformParameters для отображения всплывающих веб-диалогов аутентификации.

Android

Для Android нам нужно инициализировать PlatformParameters текущим окном/диалогом, то есть в терминах Android — Activity. Для этого мы можем использовать Forms.Context. Добавляем в Android-проект файл Helper.cs со следующим кодом.

Если VS будет подчеркивать красным IAuthenticator — запусти сборку, чтобы проверить, что собирается успешно.

Также обрати особое внимание на метаатрибут Dependency для данного Helper namespace — именно он позволяет DependencyService сопоставить вызов из общего кода и реализацию для конкретной платформы.

Также для Android нам нужно переопределить OnActivityResult метод в MainActivity.cs файле (внутри класса MainActivity) для правильной обработки и продолжения последовательности диалогов аутентификации (также добавляем два namespace через директивы using).

Теперь переходим к iOS.

В iOS для PlatformParameters передаем UIViewController в качестве контекста, а именно RootViewController — то есть текущее окно.

Не забываем про атрибут Dependency перед namespace. Для iOS не нужно переопределять метод возврата результатов окна/диалога.

Для того чтобы собрать iOS-проект, нам понадобится Mac-хост с агентом сборки или, например Mac-машина в облаке для сборки, которую предоставляет Microsoft App Center (опять-таки можно попробовать бесплатно — до 240 минут сборки в месяц плата не взимается).

Теперь реализация для Windows UWP (Universal Windows Platform).


Universal Windows Platform

Здесь тоже все очень просто — добавляем знакомый файл Helper.cs с реализацией интерфейса IAuthenticator, не забывая про атрибут Dependency.

Теперь вернемся в общий проект для добавления вызова аутентификации.

Общий проект

Добавим кнопку для входа с использованием многофакторной аутентификации в общий проект. Заходим в общий проект Xamarin Forms, в котором содержится общий код и общий пользовательский интерфейс для всех платформ, и открываем через Solution Explorer главную страницу приложения — MainPage.xaml.

Solution Main Page

Если Solution Explorer не видно, его можно включить через меню View → Solution Explorer.

Обрати внимание, что VS предложит запустить визуализацию интерфейса через Live Player, — нажми Live Run, и ты сможешь вживую видеть на эмуляторе прямо во время редактирования, как изменяется пользовательский интерфейс приложения. Очень удобно для разработки. Визуализация будет идти с некоторой задержкой, поэтому просто продолжай редактирование.

В Xamarin Forms вся логика пишется на языке C#, а визуализация на языке разметки XAML.

Познакомиться подробно с разработкой на Xamarin Forms можно, скачав бесплатную и очень подробную книгу знаменитого Чарльза Петцольда (думаю, многие помнят этого автора) «Creating Mobile Apps with Xamarin.Forms».

В основном Page (окне) приложения MainPage.xaml добавим кнопку с обработчиком, для этого XAML-код для кнопки (Button) поместим вместе с существующим Label внутрь контейнера StackPanel. Этот простейший контейнер выстраивает внутри себя контролы в ряд по вертикали или горизонтали.

В Xamarin Forms язык XAML поддерживает множество различных контейнеров, причем их можно вкладывать друг в друга, создавая гибко масштабируемые интерфейсы под любые размеры экранов.

После этого сразу перейдем в файл MainPage.xaml.cs (для этого нужно развернуть секцию с MainPage.xaml, чтобы увидеть код/code-behind) и добавим обработчик нажатия кнопки, а также нужные нам идентификаторы и namespaces.

После этого прописываем в приложение в код идентификаторы, которые мы сконфигурировали при регистрации приложения в облачном сервисе Azure Active Directory. Их полное соответствие в приложении и сервисе необходимо, чтобы сервис не отклонял обращения приложения:

clientID — это Application ID из наших настроек облачного сервиса выше.

returnURI — это Redirect URI из наших настроек облачного сервиса выше.

Запуск приложения

Теперь можно запускать приложение (например, на эмуляторе по F5) и аутентифицироваться учетными данными пользователя, которого мы завели выше. При первом входе после корректного ввода имени пользователя и пароля система предложит пользователю зарегистрировать свой мобильный номер для получения подтверждающих звонков или СМС — выбор будет зависеть от того, какие возможности многофакторной аутентификации мы разрешили в параметрах Service Settings настроек Multi-factor Authentication раздела облачного сервиса.

После регистрации мы получим звонок или СМС на мобильный телефон. Только после ввода с цифровой клавиатуры запрошенного подтверждения или СМС-кода мы успешно аутентифицируемся в системе.

При успешной аутентификации Azure Active Directory выдаст JWT-токен (JSON Web Token), который можно использовать для авторизации (разрешения) действий пользователя в мобильном приложении. Токен подписан цифровой подписью, подтверждающей его целостность, и содержит ряд полей, по которым мы можем определять не только то, что пользователь успешно прошел аутентификацию, но и к каким ролям он принадлежит. Для реализации высокой степени защиты и безопасности нужно дополнительно проверять сертификат, которым подписан токен, на то, что он действительный. Также токен нужно передавать только через защищенные соединения и хранить в защищенных хранилищах.

Если токен не получен — значит, пользователь аутентификацию не прошел и доступ к функциональности мобильного приложения разрешен быть не должен.

Полный пример приложения на GitHub содержит операцию выхода/logout, которая очищает кеш токенов в приложении, а также cookie, которые могут в соответствии с настройками сервиса Azure Active Directory позволять пользователю не вводить повторно пароль в течение настроенного времени.

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

Коды в SMS небезопасны — рекомендуем пользоваться другими вариантами двухфакторной аутентификации

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

  • Пароль в SMS можно подсмотреть, если у вас включен показ уведомлений на экране блокировки.
  • Даже если показ уведомлений отключен, можно извлечь SIM-карту из смартфона, установить в другой смартфон и принять SMS с паролем.
  • SMS с паролем может перехватить пробравшийся в смартфон троян.
  • Также с помощью различных махинаций (убеждение, подкуп, сговор и так далее) можно заполучить новую SIM-карту с номером жертвы в салоне сотовой связи. Тогда SMS будут приходить на эту карту, а телефон жертвы просто не будет связываться с сетью.
  • Наконец, SMS с паролем может быть перехвачена через фундаментальную уязвимость в протоколе SS7, по которому эти SMS передаются.

Надо заметить, что даже самый трудоемкий и высокотехнологичный из перечисленных методов перехвата пароля в SMS — с помощью взлома протокола SS7 — уже был использован на практике. Так что речь не о теоретической возможности возникновения неприятностей, а о вполне практической угрозе.

В общем, пароли в SMS — это не очень-то безопасно, а иногда даже и очень небезопасно. Поэтому есть смысл озаботиться поиском альтернативных вариантов двухэтапной аутентификации, о чем мы сегодня и поговорим.

Одноразовые коды в файле или на бумажке

Наиболее простая замена одноразовым паролям, присылаемым в SMS, — это те же самые одноразовые пароли, но заготовленные заранее. Это не самый плохой вариант, особенно для тех сервисов, в которых вам надо авторизовываться сравнительно редко. Собственно, даже для того же «Фейсбука» этот метод вполне может подойти, особенно в качестве резервного способа входа.

Работает это очень просто: по запросу сервис генерирует и показывает на экране десяток одноразовых кодов, которые в дальнейшем могут быть использованы для подтверждения входа в него. Дальше вы просто распечатываете или переписываете эти коды на бумагу и кладете в сейф. Или, что еще проще, сохраняете в зашифрованных записях в менеджере паролей.

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

Приложения для двухфакторной аутентификации

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

Как работают приложения-аутентификаторы

Работают приложения для двухфакторной аутентификации очень просто. Вот что придется сделать:

  • устанавливаете на смартфон приложение для двухфакторной аутентификации;
  • заходите в настройки безопасности сервиса, который среди опций для двухфакторной аутентификации предлагает использовать такие приложения;
  • выбираете двухфакторную аутентификацию с помощью приложения;
  • сервис покажет вам QR-код, который можно отсканировать прямо в 2FA-приложении;
  • сканируете код приложением — и оно начинает каждые 30 секунд создавать новый одноразовый код.

Коды создаются на основе ключа, который известен только вам и серверу, а также текущего времени, округленного до 30 секунд. Поскольку обе составляющие одинаковы и у вас, и у сервиса, коды генерируются синхронно. Этот алгоритм называется OATH TOTP (Time-based One-time Password), и в подавляющем большинстве случаев используется именно он.

Также существует альтернатива — алгоритм OATH HOTP (HMAC-based One-time Password). В нем вместо текущего времени используется счетчик, увеличивающийся на 1 при каждом новом созданном коде. Но этот алгоритм редко встречается в реальности, поскольку при его использовании гораздо сложнее обеспечить синхронное создание кодов на стороне сервиса и приложения. Проще говоря, есть немалый риск, что в один не очень прекрасный момент счетчик собьется и ваш одноразовый пароль не сработает.

Так что можно считать OATH TOTP де-факто индустриальным стандартом (хотя формально это даже не стандарт, на чем создатели этого алгоритма очень настаивают в его описании).

Совместимость приложений для двухфакторной аутентификации и сервисов

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

Как и в любом добротном правиле, в этом тоже есть определенное количество исключений. Некоторые сервисы по каким-то причинам, ведомым только им одним, предпочитают делать свои собственные приложения для двухфакторной аутентификации, которые работают только с ними. Более того, сами сервисы не работают ни с какими другими приложениями, кроме своих собственных.

Особенно это распространено среди крупных издателей компьютерных игр — например, существуют несовместимые со сторонними сервисами приложения Blizzard Authenticator, Steam Mobile с встроенным аутентификатором Steam Guard, Wargaming Auth и так далее. Для этих сервисов придется ставить именно эти приложения.

Также по этому странному пути пошла Adobe, разработавшая Adobe Authenticator, который работает только с аккаунтами AdobeID. Но при этом вы можете использовать для защиты AdobeID и другие аутентификаторы, так что вообще непонятно, ради чего было городить огород.


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

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

Лучшие приложения для двухфакторной аутентификации

Выбор 2FA-приложений на удивление велик: поиск по запросу «authenticator» в Google Play или Apple App Store выдает не один десяток результатов. Мы не советуем устанавливать первое попавшееся приложение — это может быть небезопасно, ведь, по сути, вы собираетесь доверить ему ключи от своих аккаунтов (оно не будет знать ваши пароли, конечно, но ведь 2FA вы добавляете именно потому, что пароли имеют свойство утекать). В общем, стоит выбирать из приложений, созданных крупными и уважаемыми разработчиками.

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

1. Google Authenticator

Поддерживаемые платформы: Android, iOS

Как отмечают буквально все публикации, Google Authenticator — это самое простое в использовании из всех существующих приложений для двухфакторной аутентификации. У него даже настроек нет. Все, что можно сделать, — это добавить новый токен (так называется генератор кодов для отдельного аккаунта) или удалить один из имеющихся. А чтобы скопировать код в буфер обмена, достаточно коснуться его пальцем на сенсорном экране смартфона или планшета. Все!

Однако у такой простоты есть и недостаток: если вам что-то не нравится в интерфейсе или хочется от аутентификатора чего-то большего — придется устанавливать другое приложение.

+ Очень просто использовать.

2. Duo Mobile

Поддерживаемые платформы: Android, iOS

Duo Mobile также крайне прост в использовании, минималистичен и лишен дополнительных настроек. По сравнению с Google Authenticator у него есть одно преимущество: по умолчанию Duo Mobile скрывает коды — чтобы увидеть код, надо нажать на конкретный токен. Если вы, как и я, испытываете дискомфорт каждый раз, когда открываете аутентификатор и показываете всем окружающим кучу кодов от всех своих аккаунтов сразу, то вам эта особенность Duo Mobile наверняка понравится.

+ По умолчанию скрывает коды.

3. Microsoft Authenticator

Поддерживаемые платформы: Android, iOS

В Microsoft тоже не стали усложнять и сделали свой аутентификатор на вид очень минималистичным. Но при этом Microsoft Authenticator заметно функциональнее, чем Google Authenticator. Во-первых, хоть по умолчанию все коды показываются, но каждый из токенов можно отдельно настроить так, чтобы при запуске приложения код был скрыт.

Во-вторых, Microsoft Authenticator упрощает вход в аккаунты Microsoft. В этом случае после ввода пароля достаточно будет нажать в приложении кнопку подтверждения входа — и все, можно даже не вводить одноразовый код.

+ Можно настроить, чтобы коды скрывались.
+ Дополнительные возможности для входа в аккаунты Microsoft.

4. FreeOTP

Поддерживаемые платформы: Android, iOS

Есть четыре причины, по которым вам может понравиться этот аутентификатор, разработанный Red Hat. Во-первых, это ваш выбор, если вы любите программное обеспечение с открытым кодом. Во-вторых, это самое маленькое приложение из всех рассматриваемых — версия для iOS занимает всего 750 Кбайт. Для сравнения: минималистичный Google Authenticator занимает почти 14 Мбайт, а приложение Authy, о котором мы поговорим ниже, — аж 44 Мбайта.

В-третьих, по умолчанию приложение скрывает коды и показывает их только после касания. Наконец, в-четвертых, FreeOTP позволяет максимально гибко конфигурировать токены вручную, если вам это зачем-нибудь нужно. Разумеется, обычный способ создания токена с помощью сканирования QR-кода тоже поддерживается.

+ По умолчанию скрывает коды.
+ Приложение занимает всего 700 Кбайт.
+ Открытый код.
+ Максимум настроек при создании токена вручную.

5. Authy

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

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

Основной недостаток Authy состоит в том, что приложение с ходу требует завести аккаунт, привязанный к вашему телефонному номеру, — без этого просто не получится начать с ним работать.

+ Токены хранятся в облаке, что позволяет использовать их на всех своих устройствах.
+ По той же причине очень удобно переезжать на новое устройство.
+ Вход в приложение защищен PIN-кодом или отпечатком пальца.
+ На экране показывается код только для последнего использованного токена.
+ В отличие от остальных приложений, поддерживает не только Android и iOS, но и Windows, macOS и Chrome.

− Требуется зарегистрироваться в Authy, используя номер телефона, — без этого приложение не работает.

6. «Яндекс.Ключ»

Поддерживаемые платформы: Android, iOS

На мой взгляд, по концепции «Яндекс.Ключ» — это самое удачное из существующих приложений для двухфакторной аутентификации. С одной стороны, оно не требует с ходу регистрироваться — можно начать им пользоваться с той же легкостью, как и Google Authenticator. С другой стороны, в нем есть несколько дополнительных возможностей, которые открываются тем, кто не поленится зайти в настройки.

Во-первых, «Яндекс.Ключ» можно «запереть» на PIN-код или отпечаток пальца. Во-вторых, можно создать в облаке «Яндекса» резервную копию токенов, защищенную паролем (а вот на этом этапе уже придется указать номер телефона), и восстановить ее на любом из используемых вами устройств. Точно так же можно будет перенести токены на новое устройство, когда понадобится переезжать.

Получается, что «Яндекс.Ключ» сочетает в себе простоту Google Authenticator и расширенную функциональность Authy — в зависимости от того, что вы предпочитаете. Единственный недостаток приложения — не вполне удобный для использования с большим количеством токенов интерфейс.

+ Минимализм на старте, расширенная функциональность доступна через настройки.
+ Создание резервных копий токенов в облаке для использования на нескольких устройствах и переезда на новые.
+ Вход в приложение защищен PIN-кодом или отпечатком пальца.
+ На экране показывается код только для последнего использованного токена.
+ Заменяет постоянный пароль к аккаунту «Яндекса».

− При большом количестве токенов не очень удобно искать нужный.

«Железные» аутентификаторы FIDO U2F: YubiKey и все-все-все

Если приложение, генерирующее одноразовые коды, кажется вам слишком эфемерным способом защитить свои аккаунты, и хочется чего-то более постоянного, надежного и материального — буквально запереть аккаунт на ключ и положить его в карман, — то у меня есть для вас хорошая новость: такой вариант также существует. Это аппаратные токены стандарта U2F (Universal 2nd Factor), созданного FIDO Alliance.

Как работают токены FIDO U2F

Аппаратные U2F-токены очень полюбились специалистам по безопасности — в первую очередь потому, что с точки зрения пользователя они работают очень просто. Для начала работы достаточно подключить U2F-токен к вашему устройству и зарегистрировать его в совместимом сервисе, причем делается это буквально в пару кликов.

Впоследствии при необходимости подтвердить вход в этот сервис нужно будет подключить U2F-токен к тому устройству, с которого вы входите, и нажать на токене кнопку (в некоторых устройствах — ввести PIN или приложить палец к сканеру). Все — никаких сложных настроек, ввода длинных последовательностей случайных символов и прочих танцев с бубном, которые обычно все себе представляют при упоминании слова «криптография».

Вставьте ключ и нажмите кнопку — и это действительно все

При этом «под капотом» все устроено очень умно и криптографически надежно: при регистрации токена на сервисе создается пара криптографических ключей — приватный и публичный. Публичный сохраняется на сервере, а приватный хранится в защищенном хранилище Secure Element, которое является сердцем U2F-токена, — и этот ключ никогда не покидает устройство.

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

Какими бывают U2F-устройства

Наиболее известный и распространенный пример U2F — это «ключи» YubiKey, которые производит компания Yubico. Собственно, она и стояла у истоков этого стандарта, но предпочла сделать его открытым, для чего и был создан FIDO Alliance. А поскольку стандарт открытый, вы не ограничены в выборе: U2F-совместимые устройства производят и продают разные компании — в онлайн-магазинах можно найти множество разнообразных моделей.


YubiKey — вероятно, самые популярные U2F-токены

Например, Google недавно представила свой комплект аппаратных аутентификаторов Google Titan Security Keys. На самом деле это ключи производства Feitian Technologies (второй по популярности производитель U2F-токенов после Yubico), для которых в Google написали собственную прошивку.

Разумеется, все аппаратные аутентификаторы, совместимые со стандартом U2F, будут с одинаковым успехом работать со всеми сервисами, которые также с этим стандартом совместимы. Однако у разных моделей есть несколько важных различий, и самое важное из них — это интерфейсы, которыми оборудован «ключ». От этого напрямую зависит, с какими устройствами он сможет работать:

USB — для подключения к компьютерам (Windows, Mac или Linux — неважно, «ключи» работают без установки каких-либо драйверов). Помимо обычного USB-A бывают «ключи» с USB-C.

NFC — необходим для использования со смартфонами и планшетами на Android.

Bluetooth — понадобится на тех мобильных устройствах, в которых нет NFC. К примеру, аутентификатор с Bluetooth все еще нужен владельцам iPhone: несмотря на то, что в iOS уже разрешили приложениям использовать NFC (до 2020 года это было позволено только Apple Pay), разработчики большинства совместимых с U2F приложений еще не воспользовались этой возможностью. У Bluetooth-аутентификаторов есть пара минусов: во-первых, их нужно заряжать, а во-вторых, их подключение занимает гораздо больше времени.

В базовых моделях U2F-токенов обычно есть только поддержка собственно U2F — такой ключ обойдется в $10–20. Есть устройства подороже ($20–50), которые заодно умеют работать в качестве смарт-карты, генерировать одноразовые пароли (в том числе OATH TOTP и HOTP), генерировать и хранить ключи PGP-шифрования, могут использоваться для входа в Windows, macOS и Linux и так далее.

Что же выбрать: SMS, приложение или YubiKey?

Универсального ответа на этот вопрос не существует — для разных сервисов можно использовать разные варианты двухфакторной аутентификации в различных сочетаниях. Например, наиболее важные аккаунты (скажем, вашу основную почту, к которой привязаны остальные учетные записи) стоит защитить по максимуму — запереть на «железный» U2F-токен и запретить любые другие опции 2FA. Так можно быть уверенным, что никто и никогда не получит доступ к аккаунту без этого токена.

Хороший вариант — привязать к аккаунту два «ключа», как это делается с ключами от автомобиля: один всегда с собой, а другой лежит в надежном месте — на случай, если первый потеряется. При этом «ключи» могут быть разного типа: скажем, приложение-аутентификатор на смартфоне в качестве основного и U2F-токен или листочек с одноразовыми паролями, лежащий в сейфе, в качестве резервного средства.

Так или иначе, главный совет — по возможности избегать использования одноразовых паролей в SMS. Правда, получится это не всегда: например, финансовые сервисы в силу своей консервативности продолжают использовать SMS и крайне редко позволяют пользоваться чем-либо еще.

Какую аутентификацию применять для одностраничных приложений?

В общем есть Single page application Angular + Web api, пока в основном только фронтэнд. Изначально сделала аутентификацию пользователей через Auth0, а теперь сомневаюсь, не лучше ли было оставить «родную» аутентификацию. Так вот в чем вопрос: какая аутентификация обычно используется в одностраничных приложениях?)

Меню пользователя @ Yana_
09.02.2020, 16:00

Какую VS использовать для создания приложений под Win7
Какую систему программирования использовать для программ C# .NET v3 или v4 для Windows 7 типа BCB6.

Какую программу использовать для создания приложений на Android?
Здравствуйте, уважаемые программисты! Я ещё только ученик, и мне интересно программирование на.

Какую IDE использовать для разработки приложений с GUI?
Нужно написать программу, чтобы она нормально выглядела нужно сделать GUI, но хочу создать его в.

Какую среду вы предпочитаете/используете для разработки приложений на Java?
Какую среду вы предпочитаете/используете для разработки приложений на Java? Думаю, что.

Надо подружить HTTP-аутентификацию и аутентификацию на сессиях
Спасайте, плиз Есть два раздела (читаем «две папки») в корне хостинга (например, r1 и r2). В.

Приложение для аутентификации Windows и Angular 7

Я разработал приложение для интранета

Серверная часть: ASP.NET WEB API-2 (все контроллеры имеют атрибут Authorize), Внешний интерфейс: Angular 7 (после сборки prod я перенес сгенерированные скрипты в свой бэкэнд-проект):

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

это мой web.config

это мой перехватчик в angular

в настройках проекта Visual Studio 2020

Анонимная аутентификация: включена

Аутентификация Windows: включена

Режим управляемого конвейера: встроенный

Вам также необходимо разрешить SupportsCredentials в запросах разных источников.

Сторона сервера (веб-API):

Установите для свойства SupportsCredentials значение true в атрибуте [EnableCors] :

Тот факт, что все работает, когда вы вводите свои учетные данные, означает, что это проблема на стороне клиента, а не на стороне сервера. Браузер не отправляет ваши учетные данные автоматически.

Chrome и IE автоматически отправят учетные данные вошедшего в систему пользователя, только если сайт находится в списке надежных сайтов в окне «Свойства обозревателя».

  1. Откройте меню «Пуск».
  2. Введите «Свойства обозревателя» и нажмите на него.
  3. Перейдите на вкладку «Безопасность».
  4. Нажмите на значок «Надежные сайты».
  5. Нажмите кнопку «Сайты».
  6. Добавьте домен для вашего сайта в список. Вы можете использовать подстановочные знаки.

Это также можно установить с помощью групповой политики, поэтому этот параметр можно распространить на каждый компьютер в вашей организации. Смотрите ответ здесь.

Пять приложений для двухфакторной аутентификации на Andro >04 March 2020

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

Сайты, которые предлагают такой способ авторизации, обычно рекомендуют установить приложение Google Authenticator. На самом деле вы можете использовать любое другое из подобных приложений. Некоторые из них даже гораздо удобнее, чем у Google. Главное — не забывайте о безопасности и не устанавливайте всё подряд.

Authy

Именно на Authy я пытаюсь постепенно переехать с Google Authenticator. Из явных преимуществ здесь: возможность скопировать код и облачная синхронизация (sic!). Теперь не надо при смене устройств перенастраивать аутентификацию во всех приложениях.

FreeOTP Authenticator

FreeOTP — бесплатное приложение с открытым исходным кодом. Как и конкуренты, поддерживает все популярные сервисы. Главное преимущество здесь — возможность использовать его в бизнес-процессах. Если ваша система поддерживает алгоритмы TOTP (Time-based One-Time Password Algorithm, RFC 6238) или HOTP (HMAC-Based One-Time Password Algorithm).

Google Authenticator

О Google Authenticator я уже писал выше. Дефолтное приложение для двухфакторной аутентификации.

Кроме того, что приложение разрабатывает Google, здесь ещё стоит отметить поддержку Android Wear. Каких-то других супер «фишек» здесь нет.

LastPass Authenticator

LastPass Authenticator — приложение от разработчиков известного менеджера паролей LastPass. А, следовательно, почти бесполезно без него.

С другой стороны, здесь есть много очень полезных штук. Например, push-оповещения, поддержка СМС-кодов, а ещё приложение доступно на всех платформах.

Microsoft Authenticator

Microsoft Authenticator — приложение от Microsoft, что очевидно. Приложение будет вам полезно, если вы часто пользуетесь сервисами от MS. Конечно, другие аккаунты тут тоже работают.

Яндекс.Ключ

Яндекс.Ключ — альтернатива от нашей родной Яндекс. Ничего особенного здесь нет. Вы так же получаете одноразовые пароли в приложении и вводите их на сайте. А вот в сервисы Яндекса уже сможете входить без паролей и ключей.

Мастер Йода рекомендует:  Массовая загрузка товаров и выставление счетов от Яндекс.Кассы
Добавить комментарий