Аутентификация и авторизация в микросервисных приложениях
Содержание:
- Что такое идентификация?
- Основные определения
- Шаг 1 — Настройка сервера
- Какие уровни входа и ввода сведений существуют
- Беспарольная аутентификация
- Что такое аутентификация и авторизация?
- Шаг 2 — Настройка компьютера пользователя
- Что такое аутентификация?
- Идентификация, аутентификация и авторизация: серьезные определения
- Единая точка входа (Single Sign On, SSO)
- Что такое Идентификация
- WebAuthn
- Вопросы от наших пользователей
- Что такое Аутентификация
- Смарт-карты.
- Перенос компонентов админпанели
- Аутентификация на основе токенов
- Двухфакторная аутентификация
- Добавление Scaffold Identity
Что такое идентификация?
Сначала давайте прочитаем определение:
Идентификация выполняется при попытке войти в какую-либо систему (например, в операционную систему или в сервис электронной почты).
Сложно? Давайте перейдём к примерам, заодно разберемся, что такое идентификатор.
Пример идентификатора в социальной сети ВКонтакте
Когда нам звонят с неизвестного номера, что мы делаем? Правильно, спрашиваем “Кто это”, т.е. узнаём имя. Имя в данном случае и есть идентификатор, а ответ вашего собеседника — это будет идентификация.
Идентификатором может быть:
- номер телефона
- номер паспорта
- номер страницы в социальной сети и т.д.
Подробнее об идентификаторах и ID рекомендую прочитать здесь.
Основные определения
Аутентификация — это процедура, которая подтверждает подлинность конкретного человека. К примеру, аутентификацией можно назвать процедуру, при которой человек предъявляет свой паспорт или другой документ, подтверждающий его личность.
Авторизация – это принципиально иной процесс, который подразумевает предоставление конкретному лицу, которое ранее прошло аутентификацию, возможность доступа работы с тем или иным ресурсом или же проведения каких-либо конкретных действий.
Стоит отметить, что данные основополагающие термины используются не только в интернет-структуре, но и в других сферах деятельности, где необходимо подтверждение личности человека, а также подтверждение возможности предоставления ему конкретных прав.
В частности, подобные технологии широко применяются в автоматизированных системах управления, при разработке пластиковых карт и прочем.
Шаг 1 — Настройка сервера
Основа любого сервера — это операционная система. В нашем случае это Windows Server 2016. А вместе с ней и другими операционными системами семейства Windows распространяется IIS (Internet Information Services).
IIS представляет собой группу интернет-серверов, в том числе веб-сервер и FTP-сервер. IIS включает приложения для создания и управления веб-сайтами.
IIS разработана для построения веб-сервисов с использованием учетных записей пользователей, предоставляемой доменом или службой Active Directory. Это позволяет использовать существующие базы данных пользователей.
В первой статье мы подробно рассказали, как доустановить и настроить на вашем сервере Центр Сертификации (Certification Authority). Сейчас мы на этом подробно останавливаться не станем, а будем считать, что все уже настроено. HTTPS-сертификат для web-сервера должен быть выписан корректно. Лучше сразу это проверить.
В Windows Server 2016 встроен IIS версии 10.0.
Если IIS установлен, то осталось его правильно сконфигурировать.
На этапе выбора служб ролей мы поставили галочку Обычная проверка подлинности.
Затем в Диспетчере служб IIS включили Обычную проверку подлинности.
И указали домен в котором расположен веб-сервер.
Потом добавили привязку сайта.
И выбрали параметры SSL.
На этом настройка сервера завершена.
После выполнения указанных действий на сайт сможет зайти только пользователь, у которого есть токен с сертификатом и PIN-код токена.
Мы еще раз напоминаем, что согласно первой статье, пользователю заранее был выдан токен с ключами и сертификатом, выписанным по шаблону типа Пользователь со смарт-картой.
Теперь переходим к настройке компьютера пользователя. Ему следует настроить браузеры, которые он будет использовать для подключения к защищаемым веб-сайтам.
Какие уровни входа и ввода сведений существуют
Условно данный процесс делится на два уровня:
- Идентификация, представляющая собой ввод личной информации юзера, зарегистрированного на сервере, эта инфа уникальная;
- Аутентификация представляет собой проверку и принятие введенных сведений на сервере.
Довольно часто вместо этих терминов используются упрощенные термины – авторизация и проверка подлинности.
Данный процесс достаточно простой, его можно рассмотреть на примере одной из соцсетей:
- Регистрация – юзер вписывает свой email, телефонный номер, код. Это уникальные сведения, их нельзя дублировать в системе, поэтому нельзя зарегистрировать больше одной учетной записи на пользователя;
- Идентификация – вы вписываете указанные в процессе регистрации данные, в нашем случае это электронка и пароль;
- Аутентификация – когда вы нажимаете клавишу «вход», страничка связывается с сервером и выполняет сканирование наличия этой комбинаций пароля и логина. Если все введено корректно, будет открыта страничка соцсети.
Если говорить короче, то при аутентификационном процессе вы проходите проверку подлинности, а при авторизационном происходит предоставление и проверка прав на совершение действий в самой системе, в этом и заключается их разница.
Беспарольная аутентификация
Первой реакцией на термин «беспарольная аутентификация» может быть «Как аутентифицировать кого-то без пароля? Разве такое возможно?»
В наши головы внедрено убеждение, что пароли — абсолютный источник защиты наших аккаунтов. Но если изучить вопрос глубже, то выяснится, что беспарольная аутентификация может быть не просто безопасной, но и безопаснее традиционного входа по имени и паролю. Возможно, вы даже слышали мнение, что пароли устарели.
Беспарольная аутентификация — это способ конфигурирования процедуры входа и аутентификации пользователей без ввода паролей. Идея такая:
Вместо ввода почты/имени и пароля пользователи вводят только свою почту. Ваше приложение отправляет на этот адрес одноразовую ссылку, пользователь по ней кликает и автоматически входит на ваш сайт / в приложение. При беспарольной аутентификации приложение считает, что в ваш ящик пришло письмо со ссылкой, если вы написали свой, а не чужой адрес.
Есть похожий метод, при котором вместо одноразовой ссылки по SMS отправляется код или одноразовый пароль. Но тогда придётся объединить ваше приложение с SMS-сервисом вроде twilio (и сервис не бесплатен). Код или одноразовый пароль тоже можно отправлять по почте.
И ещё один, менее (пока) популярный (и доступный только на устройствах Apple) метод беспарольной аутентификации: использовать Touch ID для аутентификации по отпечаткам пальцев. Подробнее о технологии.
Если вы пользуетесь Slack, то уже могли столкнуться с беспарольной аутентификацией.
Medium предоставляет доступ к своему сайту только по почте. Я недавно обнаружил, что Auth0, или Facebook AccountKit, — это отличный вариант для реализации беспарольной системы для вашего приложения.
Что может пойти не так?
Если кто-то получит доступ к пользовательским почтам, он получит и доступ к приложениям и сайтам. Но это не ваша головная боль — беспокоиться о безопасности почтовых аккаунтов пользователей. Кроме того, если кто-то получит доступ к чужой почте, то сможет перехватить аккаунты в приложениях с беспарольной аутентификацией, воспользовавшись функцией восстановления пароля. Но мы ничего не можем поделать с почтой наших пользователей. Пойдём дальше.
В чём преимущества?
Как часто вы пользуетесь ссылкой «забыли пароль» для сброса чёртового пароля, который так и не смогли вспомнить после нескольких неудачных попыток входа на сайт / в приложение? Все мы бываем в такой ситуации. Все пароли не упомнишь, особенно если вы заботитесь о безопасности и для каждого сайта делаете отдельный пароль (соблюдая все эти «должен состоять не менее чем из восьми символов, содержать хотя бы одну цифру, строчную букву и специальный символ»). От всего этого вас избавит беспарольная аутентификация. Знаю, вы думаете сейчас: «Я использую менеджер паролей, идиот». Уважаю. Но не забывайте, что подавляющее большинство пользователей не такие техногики, как вы. Это нужно учитывать.
Беспарольная аутентификация хороша не только для пользователей, но и для вас как разработчика. Вам не нужно реализовывать механизм восстановления паролей. Все в выигрыше.
Если вы думаете, что какие-то пользователи предпочтут старомодные логин/пароль, то предоставьте им оба варианта, чтобы они могли выбирать.
Сегодня беспарольная аутентификация быстро набирает популярность.
Что такое аутентификация и авторизация?
Аутентификация — это процесс, используемый для подтверждения личности пользователя, при обращении его к компьютерной системе или дополнительным системным ресурсам. В частных и государственных компьютерных сетях (включая Интернет) наиболее часто для аутентификации предполагается проверка учетных данных пользователя; то есть, имя пользователя и пароль. Однако для типов критических транзакций, например обработка платежей, проверки подлинности имени пользователя и пароля не достаточно, так как пароли могут быть украдены или взломаны. По этой причине, основная часть интернет-бизнеса, а также многие другие сделки теперь используют цифровые сертификаты, которые выдаются и проверяются центром сертификации.
Аутентификация логически предшествует авторизации. Авторизация позволяет системе определить, может ли заверенный пользователь получить доступ и возможность обновить защищенные системные ресурсы. Авторизация позволяет установить директивный доступ к папкам и файлам, часы доступа, размер разрешенного места для хранения, и так далее.
Есть два варианта авторизации:
- Изменения системных ресурсов первоначально разрешены системным администратором.
- При попытке пользователя получить доступ или обновить системный ресурс разрешение на действие оценивается системой или приложением.
Последний вариант позволяет пользователю получить доступ без аутентификации и авторизации. Он используется в случае, когда требуется предоставить доступ для анонимных не проходящих аутентификацию пользователей. Такой доступ, как правило, весьма ограничен.
Шаг 2 — Настройка компьютера пользователя
Для простоты предположим, что у нашего пользователя ОС Windows 10.
Также предположим, что у него установлен комплект Драйверы Рутокен для Windows.
Установка комплекта драйверов опциональна, так как скорее всего поддержка токена прилетит по Windows Update.
Но если этого вдруг не произошло, то установка комплекта Драйверов Рутокен для Windows решит все проблемы.
Подключим токен к компьютеру пользователя и откроем Панель управления Рутокен.
На вкладке Сертификаты установим галочку напротив необходимого сертификата, если она не стоит.
Тем самым мы проверили, что токен рабочий и содержит нужный сертификат.
Все браузеры, кроме Firefox, настраиваются автоматически.
Специально с ними делать ничего не нужно.
Теперь откроем любой браузер и введем адрес ресурса.
До того, как сайт загрузится у нас откроется окно для выбора сертификата, а затем окно для ввода PIN-кода токена.
Если для устройства в качестве криптопровайдера по умолчанию выбран Aktiv ruToken CSP, то для ввода PIN-кода откроется другое окно.
Для браузера Firefox следует выполнить дополнительные настройки.
В настройках браузера выбрать Приватность и Защита. В разделе Сертификаты нажать Устройство Защиты. Откроется окно Управление устройствами.
Нажать Загрузить, указать название Рутокен ЭЦП и путь C:\windows\system32\rtpkcs11ecp.dll.
Это все, теперь Firefox знает, как обращаться с токеном и позволяет входить на сайт, используя его.
Кстати вход по токену на веб-сайты работает и на Маках в браузере Safari, Chrome и Firefox.
Нужно лишь установить с сайта Рутокен модуль поддержки Связки Ключей и увидеть в нем сертификат на токене.
Настраивать браузеры Safari, Chrome, Яндекс и прочие не нужно, достаточно лишь открыть сайт в любом из этих браузеров.
Браузер Firefox настраивается почти также, как и в Windows (Настройки — Дополнительные — Сертификаты — Устройства защиты). Только путь к библиотеке немного другой /Library/Akitv Co/Rutoken ECP/lib/librtpkcs11ecp.dylib.
Что такое аутентификация?
После идентификации производится аутентификация:
Аутентификация – это процедура проверки подлинности (пользователя проверяют с помощью пароля, письмо проверяют по электронной подписи и т.д.)
Чтобы определить чью-то подлинность, можно воспользоваться тремя факторами:
- Пароль – то, что мы знаем (слово, PIN-код, код для замка, графический ключ)
- Устройство – то, что мы имеем (пластиковая карта, ключ от замка, USB-ключ)
- Биометрика – то, что является частью нас (отпечаток пальца, портрет, сетчатка глаза)
Отпечаток пальца может быть использован в качестве пароля при аутентификации
Получается, что каждый раз, когда вы вставляете ключ в замок, вводите пароль или прикладываете палец к сенсору отпечатков пальцев, вы проходите аутентификацию.
Идентификация, аутентификация и авторизация: серьезные определения
Итак, что же значат термины «идентификация», «аутентификация» и «авторизация» — и чем соответствующие процессы отличаются друг от друга? Для начала проконсультируемся с «Википедией»:
- Идентификация — процедура, в результате выполнения которой для субъекта идентификации выявляется его идентификатор, однозначно определяющий этого субъекта в информационной системе.
- Аутентификация — процедура проверки подлинности, например проверка подлинности пользователя путем сравнения введенного им пароля с паролем, сохраненным в базе данных.
- Авторизация — предоставление определенному лицу или группе лиц прав на выполнение определенных действий.
Единая точка входа (Single Sign On, SSO)
Обращали внимание, что, когда логинишься в браузере в каком-нибудь Google-сервисе, например Gmail, а потом идёшь на Youtube или иной Google-сервис, там не приходится логиниться? Ты автомагически получаешь доступ ко всем сервисам компании. Впечатляет, верно? Ведь хотя Gmail и Youtube — это сервисы Google, но всё же раздельные продукты
Как они аутентифицируют пользователя во всех продуктах после единственного входа?
Этот метод называется единой точкой входа (Single Sign On, SSO).
Реализовать его можно по-разному. Например, использовать центральный сервис для оркестрации единого входа между несколькими клиентами. В случае с Google этот сервис называется Google Accounts. Когда пользователь логинится, Google Accounts создаёт куку, которая сохраняется за пользователем, когда тот ходит по принадлежащим компании сервисам. Как это работает:
- Пользователь входит в один из сервисов Google.
- Пользователь получает сгенерированную в Google Accounts куку.
- Пользователь идёт в другой продукт Google.
- Пользователь снова перенаправляется в Google Accounts.
- Google Accounts видит, что пользователю уже присвоена кука, и перенаправляет пользователя в запрошенный продукт.
Очень простое описание единой точки входа: пользователь входит один раз и получает доступ ко всем системам без необходимости входить в каждую из них. В этой процедуре используется три сущности, доверяющие другу прямо и косвенно. Пользователь вводит пароль (или аутентифицируется иначе) у поставщика идентификационной информации (identity provider, IDP), чтобы получить доступ к поставщику услуги (service provider (SP). Пользователь доверяет IDP, и SP доверяет IDP, так что SP может доверять пользователю.
Выглядит очень просто, но конкретные реализации бывают очень сложными. Подробнее об этом методе аутентификации.
Что такое Идентификация
Это еще одна из встроенных функций для входа на сервис либо в приложение.
Идентификация представляет собой процедуру указания личности, когда программа должна распознать идентификатора по предоставленным данным.
В данном случае – логин, объект, желающий войти в систему, указывает свое имя и пароль к нему. Распознавание имени – это идентификация, распознавание пароля — аутентификация.
В целом процедура идентификации и процедура аутентификации напрямую зависят друга от друга. Успешное завершение этих операций подразумевает доступ к запрашиваемой системе — авторизация.
Регистрируясь на каком-либо сайте либо в приложении вы получаете номер либо имя – логин – который и является идентификатором.
Отметим, что в базе данных каждой системы идентификаторы индивидуальны, повторений быть не может.
- Серия и номер паспорта.
- Номер мобильного телефона.
- Адрес электронной почты.
- Номер аккаунта в социальной сети.
- Номер банковской карточки.
- Номер машины.
- IMEI телефона.
- Другое.
WebAuthn
- Стандарт дает пользователям возможность идентифицироваться на сайтах и в приложениях с помощью внешних ключей безопасности (например, USB-ключей) или по отпечатку пальца и, впоследствии, по другим биометрическим данным: лицу, сетчатке глаза.
- Основная задача стандарта — избавить пользователей от логинов / паролей и перейти на идентификацию с помощью криптографии с использованием публичных ключей «Public key cryptography». Public key cryptography — это криптографическая концепция, использующая пары математически связанных ключей. Private key (закрытый ключ) хранится в безопасном месте у пользователя, а public key (открытый ключ) хранится и используется открыто.
Роли
Authenticator
- Генерации public key credentials (пар открытых / закрытых ключей).
- Authenticator безопасно хранит закрытый ключ в своей памяти
- Передает открытый ключ внешним системам
- Подписывает данные закрытым ключом и результат передает внешним системам
Relying PartyUser Agent
Authorization flow
- navigator.credentials.create — для создания идентификационных данных пользователя
- navigator.credentials.get — осуществляет проверку идентификационных данных пользователя
- Зарегистрированный пользователь заходит на сайт и в форме логина выбирает войти с помощью “WebAuthn”. На сайте будет написано, конечно, не WebAuthn, а “войти по отпечатку пальца” или “войти с помощью внешнего ключа”. Приложение делает на Relying Party запрос Challenge. Challenge — имеет тот же смысл, что и Code в OAuth 2.0.
- Relying Party присылает Challenge. Этот обмен не регламентируется стандартом, но обычно используется формат REST API.
- Взаимодействие браузера и Authenticator-а происходит по протоколу CTAP (Client to Authenticator Protocols). Браузер вызывает navigator.credentials.get c параметрами:
- Challenge
- Дополнительные атрибуты
- Authenticator ищет идентификационные данные пользователя, опционально запрашивает у пользователя подтвердить, что он это он.
- Если проверка прошла успешно, то Authenticator возвращает подписанные приватным ключом данные.
- Приложение посылает подписанные данные на Relying Party.
- Relying Party расшифровывает данные с помощью открытого ключа, проверяет Challenge и авторизует пользователя.
Вопросы от наших пользователей
Основные проблемы с аутентификацией пользователей в сети Wi-Fi в целом понятны, но многие юзеры просят подробнее остановиться на некоторых моментах и задают свои вопросы. Не все до конца представляют, что делать при возникновении ошибки на смартфоне.
Что такое аутентификация Wi-Fi на телефоне?
Все современные модели смартфонов оснащены беспроводной связью Wi-Fi. Через нее можно без лишних сложностей подключаться к роутеру при нахождении в зоне досягаемости. Для обеспечения защиты от несанкционированного доступа используются пароли и специальные протоколы шифрования. Наиболее надежными считаются WPA/WPA2.
Каждый пользователь, который подключается к защищенному роутеру Wi-Fi с телефона, должен вводить пароль (проходить процедуру аутентификации). Если он будет введен неправильно, то не удастся получить доступ к Интернету. Проблемы также часто возникают при несовместимости протоколов шифрования.
Телефон не подключается к Wi-Fi (ошибка аутентификации) – что делать?
Если обычная перезагрузка маршрутизатора не помогает, то для исправления ошибки следует сделать следующее:
- проверить соответствие пароля в настройках роутера тому, что был введен в телефоне;
- удостовериться, что смартфон или планшет поддерживают технологию шифрования, установленную в конфигурации маршрутизатора;
- убедиться, что выбран соответствующий режим работы сети по максимальной скорости.
Что такое Аутентификация
Аутентификация представляет собой процедуру подтверждения подлинности.
Проверка осуществляется с помощью электронной подписи либо другого электронного ключа, может быть использован пароль и иные способы.
- Пароль – это введенное при регистрации слово, выданный графический ключ либо PIN-код.
- Механизм – в качестве такого устройства может быть использована карточка либо USB-ключ.
- Биометрика – это сетчатка глаза, отпечаток пальца, голос либо фото.
Данное понятие, чаще всего, применяется к любым информационным носителям. Процедура может быть взаимной и односторонней, наиболее популярным является криптографический метод проверки.
Одним из самых актуальных и востребованных способов проверки подлинности для входа в любую компьютерную систему является ввод пары логина и пароля, которые сохраняются в базе данных при регистрации или создании документа (страницы, аккаунта, кабинета).
Аутентификация состоит из следующих операций:
Если вы впервые входите на сайт и не знаете, что делать то следующий список поможет вам разобраться.
- Пользователем вводится логин и пароль.
- Веденная информация сравнивается с информацией в базе данных: при правильном вводе, пользователь попадает в нужный ему раздел (кабинет, страницу).
Пароль проходит проверку:
В некоторых случаях вводимый вами пароль закрыт звездочками (или точками), будьте внимательны при вводе данных.
- С применение шифров SSL или TLS.
- В открытом виде.
Двухфакторная Аутентификация 2FA
Двухфакторная аутентификация является одним из вариантов идентификации пользователя.
Используется в различных сервисах, чаще всего, это интернет-ресурсы, связанные с важной информацией либо с приложениями (сайтами), где можно проводить денежные операции
Двухфакторная Аутентификация подразумевает высший уровень защиты и состоит из таких этапов:
- Ввод логина и пароля.
- Ввод одноразового кода, который приходит на личный телефон пользователя и на указанную им электронную почту.
- В некоторых случаях может понадобиться специальный USB-ключ либо биометрические данные.
На первый взгляд, кажется, что Двухфакторная Аутентификация будет лишней, ведь уже и так создан индивидуальный логин и никому не известный пароль.
Однако стоит отметить, что на сегодня придумано огромное количество различных программ, подбирающих пароли, чем очень часто и пользуются злоумышленники, чтобы добраться к чужим данным.
А имея двойную защиту, никто не сможет получить доступ к вашей странице (аккаунту, кабинету) потому, как дополнительно необходимо иметь доступ к вашему телефону и электронной почте.
Огромным преимуществом является то, что о любых попытках взлома вы будете уведомлены сразу же, ведь если кто-то и сможет угадать ваш пароль, то вам придет подтверждающее СМС, и вы сразу сможете сменить его. На сегодня такой вид аутентификации является самым популярным и безопасным.
https://youtube.com/watch?v=44TCi7O_oPk
Разобрав все системы безопасности, становится ясно, что одной из самых надежных и удобных является двухфакторная аутентификация.
Ведь использовать систему, где необходимы биометрические данные человека не всегда удобно, по той причине, что человек может порезать палец, с которого уже невозможно будет снять отпечаток либо может опухнуть глаз и распознавание сетчатки не произойдет, голос может охрипнуть и многое другое.
Но если уж с вами и случилось что-то подобное не стоит отчаиваться, ведь для этого придуман доступ к системе с помощью резервных кодов – это пароль, который может быть использован один раз в экстренном случае.
Хранить его следует очень хорошо, чтобы никто посторонний не имел к нему выхода, ведь вы должны понимать, что если кто-то найдет его, то он автоматически будет иметь доступ к системе. Помимо этого при входе в программу с помощью резервных паролей, имеющийся пароль должен быть изменен и возможно вы навсегда потеряете доступ к системе.
Смарт-карты.
Использование смарт-карт самый распространенный метод аутентификации. Для поощрения применения организациями и пользователями смарт-карт, Windows 7 предлагает новые возможности, облегчающие их использование и развертывание. Эти новые возможности позволяют использовать смарт-карты для выполнения разнообразных задач, включая:
- Смарт-карты Plug and Play
- Личные удостоверения проверки (PIV), стандарт национального института стандартов и технологий США (NIST)
- Поддержка для входа смарт-карты Kerberos.
- Шифрование дисков BitLocker
- Документы и электронная почта
- Использование с бизнес-приложениями.
Перенос компонентов админпанели
Теперь необходимо перенести компоненты, папки моделей и баз данных, папки стилей и javascript из проекта админ панели описанной в статье Blazor админ панель.
В папке AdminPanel создадим файл импорта _Imports.razor для подключения необходимых пространств имен и путей доступа к общим компонентам и моделям. Компилятор включит директивы, указанные в файле импорта, во все компоненты папки AdminPanel и рекурсивно во всех ее вложенных папках.
В итоге, после переноса и корректировки должна сформироваться структура как показано на изображении. После запуска приложения, на данном этапе, панель администратора должна функционировать в свободном доступе, не требуя авторизацию.
Аутентификация на основе токенов
Аутентификация на основе токенов в последние годы стала очень популярна из-за распространения одностраничных приложений, веб-API и интернета вещей. Чаще всего в качестве токенов используются Json Web Tokens (JWT). Хотя реализации бывают разные, но токены JWT превратились в стандарт де-факто.
При аутентификации на основе токенов состояния не отслеживаются. Мы не будем хранить информацию о пользователе на сервере или в сессии и даже не будем хранить JWT, использованные для клиентов.
Процедура аутентификации на основе токенов:
- Пользователь вводит имя и пароль.
- Сервер проверяет их и возвращает токен (JWT), который может содержать метаданные вроде user_id, разрешений и т. д.
- Токен хранится на клиентской стороне, чаще всего в локальном хранилище, но может лежать и в хранилище сессий или кук.
- Последующие запросы к серверу обычно содержат этот токен в качестве дополнительного заголовка авторизации в виде Bearer {JWT}. Ещё токен может пересылаться в теле POST-запроса и даже как параметр запроса.
- Сервер расшифровывает JWT, если токен верный, сервер обрабатывает запрос.
- Когда пользователь выходит из системы, токен на клиентской стороне уничтожается, с сервером взаимодействовать не нужно.
У метода есть ряд преимуществ:
- Главное преимущество: поскольку метод никак не оперирует состояниями, серверу не нужно хранить записи с пользовательскими токенами или сессиями. Каждый токен самодостаточен, содержит все необходимые для проверки данные, а также передаёт затребованную пользовательскую информацию. Поэтому токены не усложняют масштабирование.
- В куках вы просто храните ID пользовательских сессий, а JWT позволяет хранить метаданные любого типа, если это корректный JSON.
- При использовании кук бэкенд должен выполнять поиск по традиционной SQL-базе или NoSQL-альтернативе, и обмен данными наверняка длится дольше, чем расшифровка токена. Кроме того, раз вы можете хранить внутри JWT дополнительные данные вроде пользовательских разрешений, то можете сэкономить и дополнительные обращения поисковые запросы на получение и обработку данных.
Допустим, у вас есть API-ресурс /api/orders, который возвращает последние созданные приложением заказы, но просматривать их могут только пользователи категории админов. Если вы используете куки, то, сделав запрос, вы генерируете одно обращение к базе данных для проверки сессии, ещё одно обращение — для получения пользовательских данных и проверки, относится ли пользователь к админам, и третье обращение — для получения данных.
А если вы применяете JWT, то можете хранить пользовательскую категорию уже в токене. Когда сервер запросит его и расшифрует, вы можете сделать одно обращение к базе данных, чтобы получить нужные заказы. - У использования кук на мобильных платформах есть много ограничений и особенностей. А токены сильно проще реализовать на iOS и Android. К тому же токены проще реализовать для приложений и сервисов интернета вещей, в которых не предусмотрено хранение кук.
Благодаря всему этому аутентификация на основе токенов сегодня набирает популярность.
Двухфакторная аутентификация
Опытным системным администраторам и службам безопасности хорошо известно, что пользователи крайне не сознательны в вопросе соблюдения политик безопасности, они могут записать свои учетные данные на стикере и приклеить его рядом с компьютером, передать пароли своим коллегам и тому подобное. Особенно часто это происходит, когда пароль сложный (содержащий более 6 знаков и состоящий из букв разного регистра, цифр и специальных символов) и его трудно запомнить. А ведь такие политики администраторами задаются не просто так. Это необходимо для защиты учетной записи пользователя от простого перебора паролей по словарю. Также администраторы рекомендуют менять пароли хотя бы раз в 6 месяцев, просто из того соображения, что за это время теоретически можно отбрутфорсить даже сложный пароль.
Давайте вспомним, что такое аутентификация. В нашем случае это процесс подтверждения подлинности субъекта или объекта. Аутентификация пользователя — это процесс подтверждения подлинности пользователя.
А двухфакторная аутентификация — это такая аутентификация, в которой необходимо использовать не менее двух различных способов для подтверждения своей личности.
Простейшим примером двухфакторной аутентификации в реальной жизни является сейф с замком и кодовой комбинацией. Чтобы открыть такой сейф необходимо знать код и владеть ключом.
Добавление Scaffold Identity
Добавим код страниц регистрации и логинирования в наше приложение. Для этого воспользуемся шаблоном Scaffold Identity, для выборочного добавления исходного кода, содержащегося в Identity Razor библиотеке классов (RCL).
- Правой кнопкой мыши щелкнуть на название проекта (в нашем случае BSAdminPanel).
- В контекстном меню выбрать Добавить->Создать шаблонный элемент.
- В диалоговом окне, слева, выбрать Удостоверение
- В диалоге Добавить Удостоверение отмечаем два файла для переопределения: Account\Login и Account\Register
- Класс контекста данных выбрать который уже есть в приложении
- Выбор страницы макета оставьте нетронутым. Макет сформируется автоматически.
После cформирования всей структуры папок в приложении два файла _LoginPartial.cshtml. Структура формируется на новый файл, который находится в папке «/Pages/Shared/_LoginPartial.cshtml», его оставляем. А в папке «/Areas/Identity/Pages/Shared/_LoginPartial.cshtml» можно удалить. Структура строится по типу шаблона для Razor Pages.