Что такое авторизация и аутентификация, разница между ними

Содержание:

Введение

Когда я говорил семье или друзьям, что я «работаю в identity», они часто предполагали, что это означает, что я работал в правительстве, в организации выдающей водительские права, или что я помогал людям разрешать мошенничество с кредитными картами.

Однако ни то, ни другое не было правдой. Ранее я работал в компании Auth0,, которая управляет цифровой идентификацией. (Сейчас я являюсь участником программы Auth0 Ambassadors и являюсь экспертом Google Developer по SPPI: Security, Privacy, Payments, and Identity — безопасность, конфиденциальность, платежи и идентификация.)

Цифровая идентификация

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

Что это значит?

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

Это приводит нас к …

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

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

Как только система сможет установить это, мы приходим к …

Стандарты

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

Есть много разных стандартов и организаций, которые управляют работой Интернета. Два органа, которые представляют для нас особый интерес в контексте аутентификации и авторизации, — это Инженерная рабочая группа по Интернету (Internet Engineering Task Force — IETF) и Фонд OpenID (OpenID Foundation — OIDF).

IETF (Internet Engineering Task Force)

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

OIDF (OpenID Foundation)

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

Теперь, когда нам известны спецификации и кто их пишет, давайте вернемся к авторизации и поговорим о:

OAuth 2.0

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

OAuth не является спецификацией аутентификации. OAuth имеет дело с делегированной авторизацией. Помните, что аутентификация — это проверка личности пользователя. Авторизация касается предоставления или отказа в доступе к ресурсам. OAuth 2.0 предоставляет доступ к приложениям от имени пользователей.

Как было до OAuth

Чтобы понять цель OAuth, нам нужно вернуться назад во времени. OAuth 1.0 был создан в декабре 2007 года. До этого, если нам требовался доступ к сторонним ресурсам, это выглядело так:

Допустим, вы использовали приложение под названием HireMe123. HireMe123 хочет настроить событие календаря (например, встречу на собеседование) от вашего имени (пользователя). HireMe123 не имеет собственного календаря; поэтому нужно использовать другой сервис под названием MyCalApp для добавления событий.

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

Затем HireMe123 используя ваш логин получить доступ к API MyCalApp, и затем сможет создавать события календаря с использованием ваших учетных данных.

Совместное использование учетных данных — это плохо!

Этот подход основывался на совместном использовании личных учетных данных пользователя из одного приложения с совершенно другим приложением, и это не очень хорошо.

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

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

Литература

  • Ричард Э. Смит. Аутентификация: от паролей до открытых ключей = Authentication: From Passwords to Public Keys First Edition. — М.: Вильямс, 2002. — С. 432. — ISBN 0-201-61599-1.
  • под. редакцией А.А. Шелупанова, С.Л. Груздева, Ю.С. Нахаева. Аутентификация. Теория и практика обеспечения доступа к информационным ресурсам. = Authentication. Theory and practice of ensuring access to information resources.. — М.: Горячая линия – Телеком, 2009. — С. 552. — ISBN 978-5-9912-0110-0.
  • Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М.: Триумф, 2002. — 816 с. — 3000 экз. — ISBN 5-89392-055-4.
  • Linn J. Common Authentication Technology Overview,.
  • Bellovin S. and M. Merritt. Limitations of the Kerberos Authentication System.
  • Kaufman, C. Distributed Authentication Security Service (DASS).
  • Anderson, B.,. TACACS User Identification Telnet Option. — December 1984.
  • Tardo J. and K. Alagappan. SPX: Global Authentication Using Public Key Certificates. — М.California, 1991. — С. pp.232-244.
  • А.А. Гладких, В.Е. Дементьев. Базовые принципы информационной безопасности вычислительных сетей.. — Ульяновск: УлГТУ, 2009. — С. 156.

Особенности работы протокола HTTP¶

Как вы узнали из прошлой главы, работа с веб-сайтами в интернете происходит по протоколу HTTP.
Это замечательный и простой протокол, который действует по схеме «запрос-ответ». То есть клиент (браузер) пользователя посылает на сервер запрос, состоящий, как правило, только из заголовков, а затем получает ответ в виде заголовков ответа и тела самого документа.

В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ».

Иными словами, сервер не «запоминает» клиентов; каждый запрос он обрабатывает с «чистого листа».

Для сервера нет никакой разницы: запросил один пользователь страницу десять раз или десять разных пользователей по разу. Для него все запросы одинаковые.

Чем это неудобно для нас?

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

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

OAuth 2.0

  • Resource Owner — пользователь, который заходит на MySite и дает ему разрешение использовать свои закрытые данные из Соцсети.
  • Client (он же MySite) — приложение или интернет сайт, которым пользуется пользователь и которое взаимодействует с Authorization Server и Resource Server для получения закрытых данных пользователя.
  • Authorization Server — сервер который проверяет логин/пароль пользователя, он же Соцсеть.
  • Resource Server — хранит закрытую пользовательскую информацию, которую можно получить с помощью API. Authorization Server и Resource Server могут быть совмещены в одну систему.

Authorization flow

  • Перед началом авторизации необходимо зарегистрировать MySite в Соцсети:
  • Разработчик MySite задает Name (имя приложения), Homepage (адрес домашней страницы MySite) и Callback (адрес, на который Соцсеть перенаправит пользователя после успешной авторизации)
  • Соцсеть выдает Client ID (иногда его называют AppID) и Client Secret.
  • Client ID и Client Secret разработчик должен прописать в своем Client.
  1. Resource Owner заходит на Client (MySite), выбирает опцию “войти с помощью Соцсети”, сайт перенаправляет пользователя в Cоцсеть на Authorization Server.
  2. Authorization Server проверяет есть ли у пользователя активная сессия и, если нет, то показывает форму для логина.
  3. Resource Owner вводит свои логин/пароль и подтверждает, что определенные закрытые данные могут быть использованы MySite, например имя пользователя или e-mail адрес.
  4. Authorization Server проверяет пользователя и перенаправляет на адрес Callback с результатом аутентификации и “Authorization Code”
  5. В ответ Client посылает “Authorization Code”, Client ID и Client Secret.
  6. Authorization Server проверяет присланные данные и формирует “access token” в формате JWT (JSON Web Token), подписанный своим приватным ключом. В этом же JWT может содержаться и “refresh token”, c помощью которого возможно восстановление сессии после ее окончания.
  7. После этого Client может запросить закрытую информацию пользователя с помощью вызова API, в который передается “access token”.
  8. Resource Server проверяет “access token” (например, используя открытый ключ Authorization Server) и предоставляет доступ к данным пользователя.

OAuth 2.0 Лабораторная работа (GitHub)

  • Client ID: ab8ec08a620c2
  • Client Secret: e6fdd52b0a99e8fbe76b05c1b7bb93c1e
  • адрес — это точка логина на GitHub
  • client_id — это Client ID, выданный при регистрации
  • адрес — это точка получения access token на GitHub
  • client_id — это Client ID, выданный при регистрации
  • client_secret это Client Secret, выданный при регистрации
  • code — это только что присланный code

Авторизация и аутентификация: разница и типы

Есть несколько типов определения подлинности, различающихся по уровню защиты и использованию:

  • Защита с паролем. Юзер знает ключ, неизвестный никому. Сюда же относится идентификация через получение SMS;
  • Привлечение предметов. Привлекают компании и фирмы. То есть тут используются карточки, брелки, флешки и прочее;
  • Биометрическая проверка. Проверяется глазная сетчатка, голос, отпечатки пальцев. Это практически самая мощная системная защита;
  • Скрытые данные. Чаще всего привлекается для защиты ПО. Проверяется кэш обозревателя, местоположение, которое установлено на компьютер.

Пароли

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

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

Специальные предметы

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

Биометрические системы

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

Отличие авторизации от аутентификации

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

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

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

Элементы аутентификации

  1. Субъект — пользователь
  2. Характеристика субъекта — информация, предоставляемая пользователем для проверки подлинности.
  3. Владелец системы аутентификации — владелец ресурса.
  4. Механизм аутентификации — принцип проверки
  5. Механизм авторизации — управление доступом

Методы аутентификации

  1. Парольные
  2. Комбинированные
  3. Биометрические
  4. Информация о пользователе
  5. Пользовательские данные

Парольные

Самый распространенный метод. Аутентификация может проходить по одноразовым и многоразовым паролям. Многоразовый пароль задает пользователь, а система хранит его в базе данных. Он является одинаковым для каждой сессии. К ним относятся PIN-коды, слова, цифры, графические ключи. Одноразовые пароли — разные для каждой сессии. Это может быть SMS с кодом. 

Комбинированные

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

Биометрические

Это самый дорогостоящий метод аутентификации. Он предотвращает утечку или кражу персональной информации. Проверка проходит по физиологическим характеристикам пользователя, например, по отпечатку пальца, сетчатке глаза, тембру голоса и даже ДНК.

Информация о пользователе

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

Пользовательские данные

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

Классификация видов аутентификации

В зависимости от политики безопасности систем и уровня доверия

  • Односторонняя. Пользователь доказывает право доступа к ресурсу его владельцу.
  • Взаимная. Проверяется подлинность прав доступа и пользователя и владельца сайта. Для этого используют криптографические способы.

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

Типы протоколов обусловлены тем, где происходит аутентификация — на PC или в сети.

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

  • Login
  • PAP (Password Authentication Protocol) — логин и пароль
  • Карта доступа — USB и сертификаты
  • Биометрические данные

Аутентификация в сети

  • Cookies. Используются для отслеживания сеанса, сохранения предпочтений и сбора статистики. Степень защиты невысокая, однако привязка к IP-адресу решает эту проблему.
  • Kerberos. Протокол взаимной аутентификации с помощью криптографического ключа.
  • SAML (Security Assertion Markup Language) Язык разметки, который позволяет сторонам обмениваться данными аутентификации.
  • SNMP (Simple Network Management Protocol) Протокол, который контролирует подключенные к сети устройства.
  • Сертификаты X.509 Сертификаты с открытым ключом.
  • OpenID Connect. Используется для создания единой учетной записи для аутентификации на разных ресурсах.

Беспарольная аутентификация

Первой реакцией на термин «беспарольная аутентификация» может быть «Как аутентифицировать кого-то без пароля? Разве такое возможно?»

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

Беспарольная аутентификация — это способ конфигурирования процедуры входа и аутентификации пользователей без ввода паролей. Идея такая:

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

Есть похожий метод, при котором вместо одноразовой ссылки по SMS отправляется код или одноразовый пароль. Но тогда придётся объединить ваше приложение с SMS-сервисом вроде twilio (и сервис не бесплатен). Код или одноразовый пароль тоже можно отправлять по почте.

И ещё один, менее (пока) популярный (и доступный только на устройствах Apple) метод беспарольной аутентификации: использовать Touch ID для аутентификации по отпечаткам пальцев. Подробнее о технологии.

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

Medium предоставляет доступ к своему сайту только по почте. Я недавно обнаружил, что Auth0, или Facebook AccountKit, — это отличный вариант для реализации беспарольной системы для вашего приложения.

Что может пойти не так?

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

В чём преимущества?

Как часто вы пользуетесь ссылкой «забыли пароль» для сброса чёртового пароля, который так и не смогли вспомнить после нескольких неудачных попыток входа на сайт / в приложение? Все мы бываем в такой ситуации. Все пароли не упомнишь, особенно если вы заботитесь о безопасности и для каждого сайта делаете отдельный пароль (соблюдая все эти «должен состоять не менее чем из восьми символов, содержать хотя бы одну цифру, строчную букву и специальный символ»). От всего этого вас избавит беспарольная аутентификация. Знаю, вы думаете сейчас: «Я использую менеджер паролей, идиот». Уважаю. Но не забывайте, что подавляющее большинство пользователей не такие техногики, как вы. Это нужно учитывать.

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

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

Сегодня беспарольная аутентификация быстро набирает популярность.

Двухфакторная аутентификация

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

Всем знаком следующий пример: сначалы вы вводите логин и пароль, а затем одноразовый пароль (код проверки), отправляемый вам по SMS. Если ваш обычный пароль был скомпрометирован, аккаунт останется защищённым, потому что на втором шаге входа злоумышленник не сможет ввести нужный код проверки.

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

При двухфакторной аутентификации пользователь должен предоставить два из трёх:

  • То, что вы знаете: пароль или PIN.
  • То, что у вас есть: физическое устройство (смартфон) или приложение, генерирующее одноразовые пароли.
  • Часть вас: биологически уникальное свойство вроде ваших отпечатков пальцев, голоса или снимка сетчатки.

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

По мотивам статьи на хабре Как ты реализуешь аутентификацию, приятель?

Настройка NPS

Radius Server

Для того, чтоб NPS переадресовывал запросы компоненту:

  1. В разделе «Remote RADIUS Server Groups» создайте новую группу «MultiFactor Radius Adapters».
  2. Добавьте в группу сервер с адресом из параметра .
  3. На вкладке «Authentication/Accounting» скопируйте Shared Secret из настроек ресурса Мультифактора.
  4. Поставьте флажок «Request must contains message authenticator attribute».
  5. На вкладке «Load Balancing» поставьте таймауты в 30 секунд.

Radus Client

Для того, чтоб компонент обращался к NPS

  1. В разделе «RADIUS Clients» создайте нового клиента
    • Friendly Name: Radius Adapter
    • Address: из параметра
    • Shared Secret: из настроек ресурса Мультифактора

Политики подключений

У вас должно быть создано две политики в разделе «Connection Request Policies»:

  1. Политика обработки запроса от VPN устройства:
  2. Политика обработки запроса от компонента:
    • на вкладке «Conditions» добавьте условие NAS Identifier и поставьте значение из настроек ресурса Мультифактора
    • на вкладке «Settings» в разделе «Authentication» выберите пункт «Authenticate requests on this server».

Типы аутентификации

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

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

Кроме использования логина или пароля для доступа в Сеть, специальные программные модули производят, так сказать, проверку законности подключения. Аутентификация WiFi или проводного подключения подразумевает не только сравнение паролей и логинов. Все намного сложнее. Сначала проверяется IP-адрес компьютера, ноутбука или мобильного гаджета.

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

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

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

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

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

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

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

История

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

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

Последствия нехватки безопасности API

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

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

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

В целом, аутентификация и авторизация с помощью API служат следующим целям:

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

Классификация видов аутентификации

В зависимости от политики безопасности систем и уровня доверия

  • Односторонняя. Пользователь доказывает право доступа к ресурсу его владельцу.
  • Взаимная. Проверяется подлинность прав доступа и пользователя и владельца сайта. Для этого используют криптографические способы.

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

Типы протоколов обусловлены тем, где происходит аутентификация — на PC или в сети.

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

  • Login
  • PAP (Password Authentication Protocol) — логин и пароль
  • Карта доступа — USB и сертификаты
  • Биометрические данные

Аутентификация в сети

  • Cookies. Используются для отслеживания сеанса, сохранения предпочтений и сбора статистики. Степень защиты невысокая, однако привязка к IP-адресу решает эту проблему.
  • Kerberos. Протокол взаимной аутентификации с помощью криптографического ключа.
  • SAML (Security Assertion Markup Language) Язык разметки, который позволяет сторонам обмениваться данными аутентификации.
  • SNMP (Simple Network Management Protocol) Протокол, который контролирует подключенные к сети устройства.
  • Сертификаты X.509 Сертификаты с открытым ключом.
  • OpenID Connect. Используется для создания единой учетной записи для аутентификации на разных ресурсах.

Образцы разделов авторизации

Ниже приведены несколько примеров разделов авторизации в документации API.

SendGrid

API ключ SendGrid

SendGrid предлагает подробное объяснение ключей API, начиная с основ, поясняя: «Что такое ключи API?». Контекстно раздел ключей API появляется вместе с другими разделами по управлению учетными записями.

авторизация Twitter

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

Amazon Web Services

авторизация Amazon

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

Dropbox

Авторизация в Dropbox

Как и Twitter, Dropbox также использует OAuth 2.0. Их документация включает в себя не одну, а две диаграммы и подробное объяснение процесса.

Что документируется в разделе аутентификации

В документации API не нужно подробно объяснять внешним пользователям, как работает аутентификация. Отсутствие объяснений внутренних процессов аутентификации, является лучшей практикой, поскольку хакерам будет сложнее злоупотреблять API.

Тем не менее нужно объяснить необходимую информацию:

  • как получить API ключ;
  • как пройти аутентификацию запроса;
  • сообщения об ошибках, связанных с неверной аутентификацией;
  • чувствительность информации аутентификации;
  • период действия токена доступа (авторизации).

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

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

Регистрация на сайте¶

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

Аккаунт — это учётная запись пользователя.

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

После регистрации все данные из формы сохраняются в базе данных как есть

Но хранению паролей нужно уделить особое внимание

Хранение паролей

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

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

Что такое хеширование

Отпечаток (хэш) — это результат работы функции хэширования, которая вернёт для любого значения строку фиксированной длины.

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

Обратная операция (получить из отпечатка оригинал) невозможна.

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

Результат обработки этой строки хэширующей функцией SHA-1 будет таким:

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

Нам же функции хэширования помогут для сравнения паролей.

Реализация регистрации пользователя

Вернёмся к форме регистрации.

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

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

Вызов этой функции вернёт следующую строку:

Именно это значение и следует хранить в БД, вместо пароля.

Проверка пароля при входе на сайт

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

Для сравнения пароля с его хэшом существует функция . Ей передаётся пароль и хэш, с которым надо сравнить данный пароль. Функция вернет или в зависимости от результата сравнения:

Элементы системы аутентификации

В любой системе аутентификации обычно можно выделить несколько элементов:

  • субъект, который будет проходить процедуру
  • характеристика субъекта — отличительная черта
  • хозяин системы аутентификации, несущий ответственность и контролирующий её работу
  • сам механизм аутентификации, то есть принцип работы системы
  • механизм управления доступом, предоставляющий определённые права доступа субъекту
Элемент аутентификации Пещера 40 разбойников Регистрация в системе Банкомат
Субъект Человек, знающий пароль Авторизованный пользователь Держатель банковской карты
Характеристика Пароль «Сим-Сим, откройся!» Тайный пароль Банковская карта и персональный идентификатор
Хозяин системы 40 разбойников Предприятие, которому принадлежит система Банк
Механизм аутентификации Волшебное устройство, реагирующее на слова Программное обеспечение, проверяющее пароль Программное обеспечение, проверяющее карту и персональный идентификатор
Механизм управления доступом Механизм, отодвигающий камень от входа в пещеру Процесс регистрации, управления доступом Разрешение на выполнение банковских действий

Заключение

  • OAuth 2.0 — используется для регистрации и входа пользователей на сайты с помощью соцсетей. А также для получения данных пользователей из соцсетей.
  • OpenID Connect — используется для аутентификации пользователей и позволят предоставить им доступ к своим закрытым данным на сайтах. Также OpenID Connect служит для реализации сложных сценариев взаимодействия в корпоративных SSO системах.
  • WebAuthn — используется для добавления на сайт возможности аутентификации с помощью внешнего физического ключа или отпечатка пальца.

Выводы

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

It’s only the beginning!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *