Как создать токен за 5 минут? Рассказываем на примере платформы Enecuum


Современные методы аутентификации Аутентификация и идентификация Факторы аутентификации Парольная аутентификация Биометрия Многофакторная аутентификация Тенденции на рынке современных токенов Интеграция с системами управления доступом Встроенная флэш-память Генераторы одноразовых паролей Java-токены Централизованное управление средствами аутентификации Итоги Врезка – Пример внедрения

Вы всё еще используете пароли? Тогда мы идём к Вам!

Аутентификация и идентификация

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

  1. Идентификация – процедура распознавания субъекта по его идентификатору (некоторой информацией – числу, строке символов).
  2. Аутентификация (подтверждение подлинности) – процедура проверки соответствия субъекта и того, за кого он пытается себя выдать, с помощью некой уникальной информации.

Таким образом, идентификация – это всего лишь поиск идентификатора в базе данных учётных записей, а аутентификация – это проверка соответствия между субъектом и предъявляемым им идентификатором. Чтобы доказать свою подлинность, субъект должен предъявить нечто, называемое фактором аутентификации. Строго говоря, фактор аутентификации – это определенный вид уникальной информации, предоставляемый субъектом системе при его аутентификации. Всего различают четыре фактора аутентификации:

  1. Субъект имеет нечто (дискету, токен,…)
  2. Субъект знает нечто (пароль, логин,…)
  3. Субъект обладает некой биологической особенностью (отпечаток пальца, структура ДНК,…)
  4. Субъект находится в определённом месте (IP-адрес, данные от радио-метки,…)

Факторы аутентификации

Парольная аутентификация

Самый распространённый способ аутентификации – парольный. Однако слабая парольная защита не удовлетворяет современному уровню требований информационной безопасности. Надежность этого способа аутентификации в значительной степени зависит от человеческого фактора, то есть от того, насколько качественные ключевые слова будут выбирать пользователи и насколько серьезно они будут относиться к их хранению. Часто сотрудники стараются упростить свою жизнь, нарушая при этом правила безопасности, и фактически, подчас сами того не сознавая, открывают злоумышленникам дорогу к «святая святых» — коммерческой информации компании. Обратимся к аналитике: Лишь 23% ИТ-сотрудников, опрошенных Ponemon Institute, высказали уверенность в том, что неструктурированные данные (например, текстовые документы), которыми обладает компания, надежно защищены. Наоборот, 84% заявило, что к конфиденциальной информации имеют доступ слишком многие, а 76% признало, что не располагают средствами контроля доступа сотрудников к данным. Таким образом, продолжая тратить значительные суммы на системы хранения данных, компании недостаточно внимания уделяют их защите и контролю доступа к ним. Как это ни парадоксально звучит, парольная защита является одним из самых дорогих в эксплуатации способов аутентификации. Казалось бы, наоборот, система защиты встроена в ОС, никаких дополнительных затрат не нужно… Но обслуживание и сопровождение парольной защиты отнимает много времени у сотрудников компании, ответственных за работоспособность информационной системы. Им необходимо регулярно проводить аудит паролей пользователей, консультировать по правилам выбора и хранения паролей, производить замену паролей для профилактики, а также в случае их утери или забывчивости пользователей. Все это требует времени и ресурсов, причем немалых. Исследования Gartner показывают, что от 10 до 30 % звонков в службу технической поддержки компании — просьбы сотрудников восстановить забытые ими пароли.

Обнаружение кражи аутентификационных токенов

Предотвращение — это первая линия защиты: должны быть приняты все возможные меры, чтобы снизить шанс воровства. Однако аутентификационные токены относительно часто подвержены краже из-за того, что передаются ненадёжной стороне (интерфейсу приложения), поэтому обнаружение кражи играет важную роль в безопасности. Существующие методы обнаружения основаны на эвристических алгоритмах вроде отслеживания внезапных изменений IP-адресов и следов браузера (или мобильного устройства), а также маркировка «необычного поведения пользователя». К несчастью, эти методы могут быть неточными, их легко подделать и сложно реализовать. Однако есть надёжный способ интегрировать обнаружение кражи в поток управления сеансом.

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

Биометрия

При использовании биометрии пользователь предоставляет образец — опознаваемое, необработанное изображение или запись физиологической или поведенческой характеристики — с помощью регистрирующего устройства (например, сканера или камеры). Этот биометрический образец обрабатывается для получения информации об отличительных признаках, в результате чего получается контрольный шаблон (или шаблон для проверки). Шаблоны представляют собой достаточно большие числовые последовательности; сам образец невозможно восстановить из шаблона. Контрольный шаблон и есть «пароль» пользователя. Контрольный шаблон сравнивается с эталонным или зарегистрированным шаблоном, созданным на основе нескольких образцов определенной физиологической или поведенческой характеристики пользователя, взятых при его регистрации в биометрической системе. Поскольку эти два параметра (контрольный и эталонный шаблон) полностью никогда не совпадают, то биометрической системе приходится принимать решение о том, «достаточно» ли они совпадают. Степень совпадения должна превышать определенную настраиваемую пороговую величину. В силу этих ограничений, биометрию нельзя относить к методам строгой аутентификации, т.к. по своей природе она является вероятностной и подвержена различным видам атак:

  1. подделка отличительной черты;
  2. воспроизведение поведения пользователя;
  3. перехват биометрических показателей;
  4. воспроизведение биометрической подписи.

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

Виды токенов

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

  1. Equity tokens — это токены, в ценность которых входят акции предприятий.
  2. Utility tokens. Тут как пример можно привести начисление каких-либо баллов за совершение определенных действий, которые начисляются в играх.
  3. Utility tokens – это токены на основе товаров или услуг.

Третий тип токенов наиболее обеспеченный, так как компании, которые предоставляют товары и услуги, или же отдельные лица, выступают гарантом совершения сделок. В данном случае один или несколько товаров (услуг) равняются одному токену.

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

Токены предназначены для упрощения и удобности проведения транзакций между сторонами, а также для ускорения процесса транзакции при помощи технологии blockchain. Это альтернативный способ инвестиции в акции.

Многофакторная аутентификация

Для повышения безопасности на практике используют несколько факторов аутентификации сразу. Однако, при этом важно понимать, что не всякая комбинация нескольких методов является многофакторной аутентификацией. Например, использование для аутентификации лица и голоса пользователя не может быть признана таковой, поскольку оба используемых фактора относятся к одному типу— «на основе биометрических данных». Специалисты по информационной безопасности чаще всего относят биометрию (на данном этапе её развития) к дополнительным методам, позволяющим идентифицировать пользователя. В основе самого надёжного на сегодня метода многофакторной аутентификации лежит применение персональных аппаратных устройств — токенов. Аутентификация на базе токенов является высокотехнологичной и, главное, надежной альтернативой и парольным, и биометрическим методам, и кроме того она существенно превосходит их по простоте интеграции и дальнейшей эксплуатации. По сути, токен – это небольшой USB-карт-ридер с интегрированным чипом смарт-карты. Токены, реализованные на основе смарт-карт, позволяют генерировать и хранить ключи шифрования, обеспечивая тем самым строгую аутентификацию при доступе к компьютерам, данным и информационным системам. Токен можно использовать для решения целого ряда различных задач, связанных с шифрованием пользовательских данных, электронной цифровой подписью документов и аутентификацией самого пользователя. С одной и той же смарт-картой пользователь может входить в операционную систему, участвовать в защищенном информационном обмене с удаленным офисом (например, с помощью технологии VPN), работать с web-сервисами (технология SSL), подписывать документы (ЭЦП), а также надежно сохранять закрытые ключи, логины, пароли и сертификаты в памяти своего токена.

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

В сложившейся терминологии и смарт-карты, и USB-ключи с чипом смарт-карты, а так же любое другое персональное средство аутентификации пользователя, принято называть токеном (от английского token – метка, жетон). Токены успешно используются в различных областях, от систем накопительных скидок до кредитных и дебетовых карт, студенческих билетов, телефонов стандарта GSM (знакомая всем SIM-карта, по сути та же смарт-карта, только без лишнего пластика и со специальным ПО), проездных билетов. Как и любая современная технология, токены постоянно модифицируются и развиваются. Рассмотрим основные направления этого развития.

Как работает аутентификация на основе токенов?

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

Аутентификация на основе токенов обычно состоит из четырёх этапов:

  1. Первоначальный запрос — пользователь запрашивает доступ к защищённому ресурсу. Изначально пользователь должен идентифицировать себя способом, не требующим токена, например, при помощи имени пользователя или пароля.
  2. Верификация — аутентификация определяет, что идентификационные данные пользователя верны, и проверяет, какие полномочия он имеет в запрошенной системе.
  3. Токены — система выпускает токен и передаёт его пользователю. В случае аппаратного токена это подразумевает физическую передачу токенов пользователю. В случае программных токенов это происходит в фоновом режиме, пока фоновые процессы пользователя обмениваются данными с сервером.
  4. Сохранение — токен удерживается пользователем, или физически, или в браузере/мобильном телефоне. Это позволяет ему выполнять аутентификацию без указания идентификационных данных.

Интеграция с системами управления доступом

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

Подробнее о сходствах и различиях токенов и криптовалюты

Криптовалюта — это виртуальная денежная единица, которая защищена средствами криптографии и применяется в системах блокчейн, практикующих майнинг (процедуру онлайн-выпуска цифровых монет). Криптовалюта может быть объектом купли-продажи, средством платежа при проведении транзакций в интернете, а также инструментом сохранения стоимости. Это делает ее полноценным аналогом настоящих денег. Их эмиссия по закону осуществляется государством.

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

А токены — что такое?

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

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

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

Не цену token влияют разные обстоятельства и факторы. Например:

  1. ситуация на рынке, которая определяется взаимодействием предложения и спроса;
  2. регламент, по которому проводится эмиссия конкретного цифрового актива (токена);
  3. размер и порядок выплаты вознаграждения, предусмотренного условиями онлайн-проекта;
  4. привязка токена к внешнему (реальному) активу.

Встроенная флэш-память

Несмотря на возможность с помощью печати на специальных принтерах превратить токен в форм-факторе смарт-карты в универсальное устройство, объединяющее бэйдж (с фотографией и ФИО владельца), средство аутентификации и карточку для прохода в помещения, в России наиболее распространённый форм-фактор подключаемых к компьютерам токенов – это USB-ключи. Связано это в первую очередь с удобством подключения – нет необходимости оборудовать каждую рабочую станцию карт-ридерами (считывателями смарт-карт). Психология пользователей, ожидающих при подключении USB-ключа появления нового диска в папке «Мой компьютер», желание сэкономить на дополнительных портах, а так же современные требования информационной безопасности во многом предопределили появление нового класса устройств. Ведущие производители аппаратных средств аутентификации предлагают комбинированную модель аппаратного USB-токена с интегрированной флэш-памятью. Помимо освобождения дополнительного USB-разъёма такое устройство имеет целый ряд преимуществ по безопасному хранению, транспортировке и удалённому доступу к конфиденциальным данным Приложения безопасности удобно хранить и запускать непосредственно из памяти токена. Аппаратная реализация криптографических алгоритмов позволяет в одном корпусе объединить сами защищаемые данные и ключи шифрования, необходимые для доступа к ним. Большой объём памяти (до 4 ГБ) позволяет размещать и автоматически запускать при подключении:

  1. Драйверы самого токена;
  2. Приложения безопасности (например, приложения для шифрования данных);
  3. Приложения, предназначенные специально для отдельных пользователей или групп пользователей;
  4. Операционные системы;
  5. Файлы установки.

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

Где купить токены и по какой цене

Купить t. можно на биржах или в обменниках. Стоимость зависит от их рыночной цены. Она определяется по степени доверия к компании. В стартапах с запущенной ICO на начальной стадии нет никаких обеспечений, кроме идеи создателей проекта.

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

Приобретение tokens во время первичной продажи — это хорошая возможность получения в будущем дохода за счет инвестирования. Чтобы понять, насколько перспективен проект, нужно проанализировать White Paper и Roadmap. В «White Paper» отражаются технические качества первоначальной продажи, инвестиционные преимущества, участники проекта и их идеи. В «Roadmap» показываются главные ступени и задачи стартапа во временной последовательности.

Прежде, чем решить, тщательно все взвесьте, определите:

  1. В каком виде представлен token?
  2. От чего зависит возрастание цены? Есть сторонние факторы?
  3. Сколько он стоит и оправдана ли его цена?
  4. Какую нишу выбрала организация стартапа? Выгодные направления — инновации, блокчейн и криптовалюта.

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

Наиболее безопасный способ — это приобретение активов на бирже (IEO). Их покупают когда они состоят в торговых парах, а это подтверждает рыночное признание проекта.

Покупка на ICO

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

Покупка пошагово:

  1. выбор подходящего стартапа;
  2. на официальном сайте проекта осуществляется переход в раздел «Присоединиться к продаже»;
  3. выбор валюты;
  4. знакомство с лицензионным соглашением;
  5. ввод адреса криптовалютного кошелька, с которого будет осуществляться оплата
  6. указание адреса, на который будет производиться выплата;
  7. перевод валюты на адрес получателя для приобретения токенов (с помощью криптовалютного кошелька);
  8. ожидание проведения транзакции;
  9. проверка счета кошелька.

Покупка через криптовалютные биржи

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

Биржи где торгуются новые t. (на эти площадки их добавляют первыми, поскольку, процесс добавления более лоялен к новым монетам):

  • Binance;
  • EXMO;
  • YObit.

Дарение за регистрацию

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

Генераторы одноразовых паролей

Для работы вне стен офиса с необорудованных и ненастроенных рабочих мест, например, в интернет-кафе использовать USB-ключи и смарт-карты фактически невозможно, особенно с учётом того, что последние помимо драйверов требуют наличия карт-ридера. Использование классических «многоразовых» паролей является серьёзной уязвимостью при работе в таких недоверенных средах. Это подтолкнуло ведущих вендоров рынка аутентификации к созданию аппаратных генераторов одноразовых паролей (ОТР-устройств, от англ. One Time Password). Такие устройства генерируют очередной пароль, который сотрудник вводит в окно запроса либо по расписанию (например, каждые 30 секунд) либо по запросу (при нажатии на кнопку). Каждый такой пароль можно использовать только один раз. Проверку правильности введённого значения на стороне сервера проверяет специальный сервер аутентификации, вычисляющий текущее значение одноразового пароля программно. Для сохранения принципа двухфакторности аутентификации помимо сгенерированного устройством значения пользователь вводит постоянный пароль. Генераторы одноразовых паролей появились до широкого распространения смарт-карт в ответ на растущее число инцидентов с кражей конфиденциальной информации при помощи удалённого доступа. Такой метод аутентификации не является строгим и носит название – усиленный. Основная уязвимость одноразовых паролей – атака типа «человек посередине». При такой атаке злоумышленник вклинивается в коммуникацию между пользователем и сервером, полностью контролируя весь информационный обмен между ними. Отсутствие криптографических преобразований как в случае с использованием смарт-карт и цифровых сертификатов снижает уровень обеспечиваемой безопасности, позволяя использовать данный способ только в определённых случаях. Так, например, банки в зависимости от метода аутентификации (по одноразовому паролю или цифровому сертификату) устанавливают различные лимиты на проведение операций. Стоит отметить, что в России в связи с более поздним становлением рынка аппаратных токенов и из-за наличия к тому времени более совершенных смарт-карт, генераторы одноразовых паролей не так широко распространены, как, например, на западе.

Ограничения JSON Web Token

Авторизационный токен существует 1 час. Для его обновления используется refresh token. С помощью него пользователи запрашивают новый авторизационный токен. При этом заново вводить логин и пароль не нужно.

Но и у refresh token есть свой срок жизни — 24 часа. Получается, нашим пользователям нужно вводить логин и пароль раз в сутки. Вроде бы не так уж и часто. Для разовых запросов такая система подходит очень хорошо. Но для автоматизированной работы с нашими сервисами через API это создаёт определённые проблемы.

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

Чтобы упростить регулярные автоматизированные запросы к сервисам через API, мы выпускаем перманентные API-токены.

Чем отличаются токены от криптовалют

Токены и криптовалюты

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

Авторизация и аутентификация для всех и каждого, часть 2

Перевод второй части статьи «Authorization and Authentication For Everyone».

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

Проблема входа в систему

После того как OAuth 2.0 обеспечил возможность доступа к сторонним API, создатели приложений также захотели, чтобы их пользователи могли логиниться при помощи других аккаунтов. Возьмем пример. Скажем, приложение HireMe123 хочет, чтобы пользователь MyCalApp мог логиниться в HireMe123, используя аккаунт MyCalApp — несмотря на то, что в самом HireMe123 у него нет аккаунта.

Но, как уже говорилось, OAuth 2.0 — это про делегированный доступ. Это НЕ протокол аутентификации. Тем не менее, это не остановило людей в их попытках использовать OAuth 2.0 именно с целью аутентификации, и это породило проблемы.

Проблемы, связанные с использованием токенов доступа для аутентификации

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

Например:

  • Кто-нибудь мог украсть токен доступа другого пользователя.
  • Токен доступа мог быть получен от другого клиента (не HireMe123) и вставлен в HireMe123.

Эта проблема получила название confused deputy. HireMe123 не знает, откуда пришел токен и для кого он был выпущен. Давайте припомним: аутентификация — это проверка, действительно ли пользователь является тем, за кого себя выдает. То, что HireMe123 может использовать токен доступа для доступа к API, не дает ему оснований полагать, что пользователь действительно является тем, кем назвался.

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

OpenID Connect

Это привело нас к спецификации под названием OpenID Connect (OIDC).

OIDC это спецификация поверх OAuth 2.0, которая говорит, как аутентифицировать пользователей. Стандарты OIDC разрабатываются OpenID Foundation (OIDF).

OIDC — это слой идентификации для аутентификации пользователей при помощи сервера авторизации.

Вы помните, что сервер авторизации выпускает токены. Токены — это закодированные кусочки данных для передачи информации между разными сторонами (такими как сервер авторизации, приложение или API). В случае OIDC и аутентификации сервер авторизации выпускает ID-токены.

ID-токены

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

OIDC декларирует фиксированный формат для ID-токенов —

JSON Web Token (JWT)

JSON Web Tokens (JWT, иногда произносится как «джот») составляются из трех URL-безопасных строковых сегментов, соединенных точками.

Заголовок JWT

Первый сегмент токена это заголовок. Он может выглядеть примерно так:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9

Заголовок токена это JSON-объект, содержащий алгоритм подписи и тип токена. Он зашифрован при помощи алгоритма base64Url (бинарные данные, представленные в виде текста).

В расшифрованном виде это выглядит примерно так:

{ «alg»: «RS256», «typ»: «JWT» }

Полезная нагрузка JWT

Второй сегмент токена — полезная нагрузка. Выглядеть этот сегмент может так:

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0

Это объект JSON, содержащий заявления (claims) — предложения о пользователе и событии аутентификации. Например:

{ «sub»: «1234567890», «name»: «John Doe», «admin»: true, «iat»: 1516239022 }

Этот сегмент тоже base64Url-зашифрован.

Крипто-сегмент

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

Получая ID-токен, клиент проверяет подпись (тоже при помощи ключа).

(При использовании асимметричного алгоритма для подписи и проверки используются разные ключи. В таком случае только у сервера авторизации есть возможность подписывать токены).

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

Заявления

Теперь, когда мы знаем анатомию JWT, давайте остановимся на заявлениях (claims) — тех самых предложениях из сегмента полезной нагрузки токена. Как следует из самого их названия, ID-токены предоставляют идентифицирующую информацию, а содержится она в заявлениях.

Заявления аутентификации

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

{ «iss»: «https://{you}.authz-server.com», «aud»: «RxHBtq2HL6biPljKRLNByqehlKhN1nCx», «exp»: 1570019636365, «iat»: 1570016110289, «nonce»: «3yAjXLPq8EPP0S», … }

Среди необходимых заявлений об аутентификации в ID-токенах можно назвать:

  • iss (issuer): сторона, генерирующая JWT, т. е., сервер авторизации;
  • aud (audience): список получателей JWT. Для ID-токенов это клиентский идентификатор приложения, получающего токен;
  • exp (expiration time): время в формате Unix Time, определяющее момент, когда токен станет не валидным (expiration);
  • iat (issued at time): время выпуска ID-токена (тоже в формате Unix Time).

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

Заявления идентичности

Заявления также включают предложения о конечном пользователе. Вот несколько примеров таких заявлений:

{ «sub»: «google-oauth2|102582972157289381734», «name»: «Kim Maida», «picture»: «https://gravatar[…]», «twitter»: «https://twitter.com/KimMaida», «email»: «[email protected]», … }

Среди стандартных заявлений профиля в ID-токенах можно назвать:

  • sub (subject): уникальный идентификатор пользователя (указывается обязательно);
  • email;
  • email_verified;
  • birthdate (дата рождения).

Итак, мы прошли краткий курс по важным спецификациям (OAuth 2.0 и OpenID Connect). Теперь давайте посмотрим, как можно применить эти знания в работе.

Аутентификация при помощи ID-токенов

Давайте посмотрим, как происходит OIDC-аутентификация.

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

Рассмтариваемые нами сущности: браузер, приложение, запущенное в браузере, и сервер авторизации. Когда пользователь хочет войти в систему (залогиниться в приложении), это приложение отсылает запрос авторизации на сервер авторизации. Пользовательские логин и пароль проверяются сервером авторизации. Если все сходится, сервер выпускает ID-токен для приложения.

Затем клиентское приложение расшифровывает ID-токен (JWT) и проверяет его. В проверку входит проверка подписи, а также заявлений:

  • issuer (iss): выпущен ли токен именно тем сервером авторизации, от которого мы ждали ответа?
  • audience (aud): является ли наше приложение тем получателем, для которого был выпущен токен?
  • expiration (exp): не истек ли срок годности этого токена?
  • nonce (nonce): можем ли мы привязать этот токен к запросу авторизации, который мы посылали?

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

Итак, пользователь аутентифицирован. Время взаимодействовать с API.

Доступ к API при помощи токенов доступа

Выше мы уже немного поговорили о токенах доступа — когда рассматривали, как работает делегированный доступ с использованием OAuth 2.0 и серверов авторизации. Теперь давайте разберем все это подробнее. Для этого вернемся к нашему сценарию с HireMe123 и MyCalApp.

Токены доступа

Токены доступа используются для предоставления доступа к ресурсам. Благодаря токену доступа, выпущенному сервером авторизации MyCalApp, HireMe123 может получить доступ к API MyCalApp.

В отличие от ID-токенов, которые OIDC определяет как JSON веб-токены, токены доступа не имеют четко определенного формата. Они не обязательно являются JWT. Тем не менее, во многих решениях для токенов доступа все же используются JWT, потому что этот формат позволяет валидацию.

Токены доступа непрозрачны для клиента

Токены доступа предназначаются для API ресурса и важно, чтобы они были непрозрачны для клиента. Почему?

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

Доступ к API ресурса

Допустим, мы хотим использовать токен доступа для вызова API одностраничного приложения. Как это происходит?

Выше мы рассматривали процесс аутентификации. Предположим, что пользователь залогинился в наше JS-приложение в браузере. Это приложение отсылает запрос авторизации к серверу авторизации, запрашивая токен доступа для вызова API.

Затем, когда наше приложение хочет вступить во взаимодействие с этим API, мы прилагаем токен доступа к заголовку запроса, вот так:

# HTTP request headers Authorization: ‘Bearer eyj[…]’

Авторизованный запрос отсылается к API, который проверяет токен при помощи промежуточного ПО. Если все сходится, API возвращает данные (например, JSON) приложению, запущенному в браузере.

Это все хорошо, но выше мы упоминали, что OAuth решает проблему чрезмерных прав доступа. Как это происходит?

Делегирование с областью видимости

Как API узнает, какой уровень доступа нужно дать приложению? Это определяется путем установления области видимости (scopes).

Область видимости «ограничивает, что именно приложение может делать в интересах пользователя». Она не позволяет выдать права, которых у пользователя уже нет. Например, если пользователь MyCalApp не имеет права создавать новые корпоративные аккаунты, область видимости гарантирует, что HireMe123 тоже не позволит пользователю создавать новые корпоративные аккаунты.

Области видимости делегируют контроль доступа самому API или ресурсу. За соответствие областей видимости правам пользователя отвечает API.

Давайте рассмотрим это на примере.

Я использую приложение HireMe123. HireMe123 хочет получить доступ к стороннему API MyCalApp для создания события в календаре от моего имени. Приложение HireMe123 уже запросило токен доступа к MyCalApp на сервере авторизации MyCalApp. В этом токене содержится важная информация:

  • sub: (мой пользовательский ID в MyCalApp);
  • aud: MyCalAppAPI (этот токен создан для доступа к API MyCalApp);
  • scope: write:events (область видимости предполагает, что HireMe123 может использовать API для записи событий в моем календаре).

HireMe123 посылает запрос к API MyCalApp с токеном доступа в заголовке авторизации. Когда API MyCalApp получает этот запрос, он видит, что в нем установлена область видимости write:events.

Но на MyCalApp содержатся аккаунты с календарями сотен тысяч пользователей. Поэтому, чтобы убедиться, что этот запрос от HireMe123 будет касаться только моих прав создавать события в моем аккаунте, промежуточное ПО API MyCalApp должно проверить не только область видимости, но и sub — идентификатор субъекта.

В контексте делегированной авторизации области видимости обозначают, что именно приложение сможет делать от имени пользователя. Это подмножество прав пользователя в целом.

Проверка согласия

Помните, мы говорили, что сервер авторизации спрашивает пользователя HireMe123, согласен ли он разрешить HireMe123 воспользоваться правами пользователя для доступа к MyCalApp?

Этот диалог выглядит примерно так:

HireMe123 может попросить предоставить ему самые разные права, на пример:

  • write:events (запись событий)
  • read:events (чтение событий)
  • read:settings (чтение настроек)
  • write:settings (запись настроек)
  • и т. д.

В целом, следует избегать давать разрешения на чисто пользовательские действия. Области видимости предназначены для прав, делегированных приложениям. Но если ваш сервер авторизации имеет функционал для контроля доступа на основе ролей (Role-Based Access Control, RBAC), вы можете устанавливать разные области видимости для разных пользователей.

При помощи RBAC на сервере авторизации можно установить разные права для разных групп пользователей. После этого сервер авторизации при выпуске токенов доступа сможет включать в scopes указание ролей пользователей.

Итоги

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

Рейтинг
( 2 оценки, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями: