Комп'ютерні мережі та розподілені системи
11. JSON <– Лекції –> 13. Хмарні технології
При обміні даними та використання сервісів в розподілених застосунках велика увага приділяється захисту інформації. У цій лекції розглянемо основи керування ідентифікацією і доступом у розподілених системах що будуються на базі обміну по HTPP.
Керування ідентифікацією та доступом Identity and Access Management - це набір політик та технологій для забезпечення доступу певних людей та/або застосунків до певних ресурсів. Системи керування ідентифікацією та доступом зокрема ідентифікують, підтверджують автентичність та надають дозволи до конкретних ресурсів.
Ідентифікація - це процедура розпізнавання користувача в системі. У залежності від ситуацій, це може бути зроблено за іменем користувача (username
), адресою електронної пошти, номером облікового запису, і тд.
Також до IAM відносяться процедури означення доступу. У сучасних системах існують як прості схеми автентифікації за іменем користувача та паролем, так і більш складні. У цій лекції розглядаються найбільш вживані.
Слід розуміти що до ВЕБ-застосунків можуть доступатися як користувачі так і інші застосунки. При цьому як правило ті ж самі застосунки використовують різні способи автентифікації для одних та інших.
Наведені нижче схеми використовуються як правило для автентифікації користувачів (людей) а не сервісів чи застосунків. Цей метод грунтується на тому, що для успішної ідентифікації і автентифікації в системі користувач повинен надати ім’я (username
) і пароль (password
). Пара імені та паролю задається користувачем при його реєстрації в системі, при цьому в якості імені може виступати і адреса електронної пошти користувача. Стосовно веб-застосунків існує кілька стандартних протоколів для автентифікації за паролем, які розглянуто нижче.
Цей протокол існує дуже давно, він описаний ще в стандартах HTTP 1.0/1.1, але до цих пір активно застосовується в корпоративному середовищі. Стосовно веб-сайтів він працює наступним чином:
Весь процес стандартизований і добре підтримується всіма браузерами і веб-серверами. Існує кілька схем аутентифікації, що відрізняються за рівнем безпеки. Basic — найбільш проста схема, при якій username
і password
користувача передаються в заголовку Authorization
в незашифрованому вигляді (base64-encoded
). Однак при використанні HTTPS (HTTP over SSL) протоколу ця схема є відносно безпечною.
рис. 12.1. Приклад HTTP автентификації з використанням Basic схеми.
Більш захищеною є схема Digest, у якій сервер посилає унікальне значення nonce
, а браузер передає хеш пароля користувача (зашифрований пароль), обчислений з використанням зазначеного nonce
. Це більш безпечна альтернатива Basic схеми при незахищених з’єднаннях, але схильна до атак типу man-in-the-middle (людина всередині). Крім того, використання цієї схеми не дозволяє застосувати сучасні хеш-функції для зберігання паролів користувачів на сервері. У системах Windows також використовуються схеми NTLM та Negotiate, які підтримуються більшістю браузерів і веб-серверів для Windows Active Directory.
Варто відзначити, що при використанні HTTP-аутентифікації у користувача немає стандартної можливості вийти з веб-застосунку, крім як закрити всі вікна браузера.
Для цього протоколу немає певного стандарту, тому всі його реалізації специфічні для конкретних систем, а точніше, для модулів аутентифікації. Цей спосіб працює це за наступним принципом: в веб-застосунок включається HTML-форма, в яку користувач повинен ввести своє ім’я та пароль. Вони відправляються на сервер через HTTP метод POST
для аутентифікації. У разі успіху веб-застосунок створює маркер сесії (session token
), який зазвичай поміщається в браузерні куки (cookies
) . При наступних веб-запитах маркер сесії автоматично передається на сервер і дозволяє застосунку отримати інформацію про поточного користувача для авторизації запиту.
рис. 12.2. Приклад автентифікації через форму.
Необхідно розуміти, що перехоплення маркерів сесії часто дає аналогічний рівень доступу, як і знання імені користувача та паролю. Тому всі комунікації між клієнтом і сервером повинні проводитися тільки по захищеному з’єднанню HTTPS.
Два протоколи, описані вище, успішно використовуються для аутентифікації користувачів на веб-сайтах. Але при розробці клієнт-серверних застосунків з використанням веб-сервісів (наприклад, iOS або Android), поряд з HTTP-автентифікацією, часто застосовуються нестандартні протоколи, в яких дані для автентифікації передаються в інших частинах запиту. Існує всього декілька місць, де можна передати ім’я і пароль користувача в HTTP запитах:
Автентифікації за паролем вважається не дуже надійним способом, так як паролі часто можна підібрати, а користувачі схильні використовувати прості і однакові паролі в різних системах, або записувати їх на клаптиках паперу. Якщо зловмисник зміг з’ясувати пароль, то користувач часто про це навіть не дізнається. Крім того, розробники застосунків можуть допустити ряд концептуальних помилок, що спрощують взлом облікових записів. Нижче наведений список вразливостей, які найбільш часто зустрічаються у разі використання автентифікації за паролем, а саме коли веб застосунок:
Вище розглядалися питання автентифікації, які передбачали що тільки користувачу буде відомий пароль. Однак, як вже зазначалося, якщо трафік прослуховується, наприклад сніфером типу Wire Shark, то ці дані легко отримати зловмиснику. Крім того, якщо трафік проходить через пристрій, керований зловмисником (відомий як людина посередині), то він зможе підміняти трафік в обидва боки між пристроями для виконання своїх зловмисних дій. Щоб убезпечитися від цього приміняють різноманітні механізми захисту, один з яких - шифрування.
Шифрування - це процес перетворення повідомлення в незрозумілий вигляд з неможливістю його відтворення в оригінальну форму без наявності відповідного ключа.
Треба розуміти відмінність понять “кодування” та “шифрування”. Звичайне кодування, на відміну від шифрування передбачає тільки зміну форми повідомлення. Тобто якщо алгоритм кодування відомий, то маючи його можна перетворити закодоване повідомлення в оригінальну форму. Шифрування передбачає кодування та декодування з використанням не тільки повідомлення і алгоритму а ще і ключів.
Отже є два процеси:
При цьому ключ - це якась порція даних, які формуються як правило з використанням випадкових алгоритмів. Чим більше довжина ключа (кількість байтів даних), тим складніше його підбірати.
Якщо при шифруванні і дешифруванні використовується той самий ключ, метод називається симетричним. Якщо для шифрування і дешифрування використовуються різні ключі, методи називається асиметричним.
рис. 12.3. Симетричне і асиметричне шифрування.
Симетричні алгоритми швидше працюють, а у відправника і отримувача має бути один і той самий ключ, який треба якимось чином переправити. Крім того, швидкість роботи означає і швидкість перебору. Тобто якщо зловмиснику буде відомо фрагмент відкритого повідомлення він гіпотетично може підбирати такий ключ, щоб із зашифрованого повідомлення отримати розшифроване. Таким чином, є проблема обміну ключами і проблема можливості їх швидкого підбору. Проблема стає ще більшою, коли необхідно зробити захищений обмін з пубілчним ресурсом, наприклад WEB-сервером, обмін ключами з яким не проводився до встановлення з’єднання.
Асиметричні алгоритми передбачають пару ключів, один з яких публічний, а один - приватний. Відкритий ключ генерується із закритого ключа. Тому маючи відкритий ключ можна робити наприклад шифрування, щоб при дешифруванні скористатися закритим ключем, або навпаки. Наприклад, маючи відкритий ключ, який відправляє сервер клієнту, той може шифрувати дані, які передає цьому серверу з використанням цього ключа. Оскільки тільки у сервера є відповідний до цього відкритого ключа закритий ключ, тільки він може зробити дешифрування.
Однак у асиметричного алгоритму є одна серйозна вада, він дуже повільно працює в порівнянні з симетричним. Але це також є і перевагою, бо для підбору ключів зловмиснику знадобиться набагато більше часу. Тому ці два методи часто комбінують. Наприклад, при встановленні з’єднання клієнт користується відкритим ключем серверу для шифрування повідомлення, використовуючи при цьому асиметичні способи шифрування. Далі клієнт з сервером по захищеному таким чином з’єднанні організовують обмін симетричними ключами, які генеруються саме для цього сеансу. Далі обмін відбувається вже з використанням симетичного шифрування. Таким чином симетричні ключі мають недовгий час життя, тому ймовірність їх підбору за час сеансу дуже низька.
Для того, щоб зловмисник не міг підробляти інформацію, вставляючи свої шматки повідомлення в оригінальні, необхідно забезпечити їх цілісність. Тобто отримувач повинен знати, що він отримав саме те повідомлення, яке йому відправляли. У лекціях з мереж ми знайомилися з контрольними сумами, які вставлялися в пакети і використовувалися для того, щоб перевірити що дані в пакетах не були спотворені. Але тут ми маємо справу з можливим навмисним спотворенням, отже і контрольну суму зловмисник також може підробити. Щоб цього не відбувалося, контрольна сума вставляється не у відкритому вигляді а в зашифрованому.
Взагалі, коли говорять про відбиток якихось даних, тобто про набір даних фіксованої довжини, значення яких змінюється в залежності від інших даних змінної дожини та змісту, то це називають хешем. Функція, яка використовується для формування такого відбитку називається хеш-функцією (hash function). Маючи алгоритм формування такого відбитку (хеш функцію), можна сформувати його при відправці і перевірити при отриманні. Якщо отриманий і повторно-згенерований хеші співпадають, то вочевидь дані не було спотворено. За хешем не можна визначити, на основі яких даних він був створений, тобто відтворити з хешу дані, по яким він генерувався неможливо. В ідеалі, різні дані повинні б були генерувати різні хеші, однак в реалії цього добитися практично неможливо. Коли за різними даними виходить один і той саме хеш - це називають колізією.
Для захисту даних при передачі від спотворення використовують різні криптографічні хеш функції (MD5 , SHA …), тобто для формування хешу використовують алгоритми шифрування з закритим ключем. Це практично унеможливлює підробку такого хешу, адже ключ шифрування закритий.
TLS/SSL - це протоколи безпечної передачі даних в Інтернет. TLS –Transport Layer Security, протокол захисту транспортного рівня, TLS1.2/TLS 1.3 (2018), RFC 8446. SSL –Secure Sockets Layer, рівень захищених сокетів, який наразі застарів. Але абревіатура “SSL” наразі використовується як назва сімейства протоколів захисту і бібліотек, наприклад OpenSSL, LibreSSL.
Протокол TLS працює поверх TCP і призначений для надання трьох основних сервісів усім програмам та протоколам, що працюють над ним (наприклад HTTP): шифрування, автентифікації за сертифікатами (див. нижче) та цілісності даних. Технічно від вас не вимагається використовувати всі три в кожній ситуації. Ви можете прийняти сертифікат без підтвердження його автентичності, але ви повинні добре знати про ризики безпеки та наслідки цього.
TSL/SSL використовується в передачі даних:
з використанням протоколу HTTPS (Hypertext Transfer Protocol Secure), за замовченням використовується порт 443; по факту це використання протоколу HTTP поверх захищених з’єднань TLS/SSL (рис.12.4.)
рис.12.4. Протокол HTTPS в стеку TCP/IP.
Послідовність роботи по SSL/TLS можна описати наступним алгоритмом:
Як бачимо процедура встановлення з’єднання є досить тривалою і може зайняти кілька сотень мілісекунд. Крім того, усі пакети в межах з’єднання передаються в зашифрованому вигляді, що трохи сповільнює обмін. Однак це є ціна за захищеність обміну поверх незахищених мереж, зокрема публічного Інтернету.
Вище ми розглянули, як деякі захищені протоколи використовують сертифікацію. У цьому пункті розглянемо основні принципи використання сертифікатів.
При підключенні клієнта до серверу, вони повинні довіряти один одному. Іншими словами, клієнт має чітко розуміти що він підключився саме до того серверу, за кого він себе видає. Сервер відправляє клієнту сертифікат, який використовується як для засвідчення того, що він дійсно той за кого видає, так і містить необхідну інформацію для подальшого обміну. Для гарантування того, що інформація приходить саме та, яка відправлялася учасником, використовується механізм електронного цифрового підпису.
Сертифікати - це по суті файли з розширенням .pem
, .crt
, .cer
, які підписаний центром сертифікації.
Електронний цифровий підпис - це дані в електронній формі, отримані за результатами криптографічного перетворення, які додаються до інших даних або документів і забезпечують їх цілісність та ідентифікацію автора. Для підписування використовується асиметричне шифрування, в якому приватний закритий ключ має підписант, а публічний, який йде з ним в парі, відомий усім учасникам і міститься в сертифікаті підписанта (рис.12.5). Приватний ключ підписант використовує для шифрування хеша, що отримуються за даними, які передаються. Далі цей хеш, який по суті і є підписом, прикріплюється до даних і передається іншому учаснику обміну. Отримувач за отриманими даними також розраховує хеш, а отриманий з даними хеш розшифровує з використанням відкритого ключа і звіряє хеші, щоб вони були однакові. Якщо хеші неоднакові, то дані були спотворені.
рис.12.5. Принцип електронного цифрового підпису
Відкритий ключ міститься в сертифікаті. Однак виникає питання, чи дійсно цей сертифікат є оригінальним і представляє ту особу, чи організацію, яка вказана в сертифікаті. Для перевірки дійсності сертифікату використовуються органи сертифкації.
Для довіри до сертифікату він має бути підписаний іншими сертифікатом від органу сертифікації (certificate authority (CA)) також називається центром сертифікації. Орган сертифікації виступає в ролі посередника, який гарантує справжність сертифікатів. Тобто органу сертифікації довіряють обидві сторони обміну, і його електронний цифровий підпис свідчить про дійсність сертифікату.
Отже центр видає сертифікати – файли з різноманітною інформацією, в тому числі відкритим ключом серверу. Справжність сертифіката центр завіряє своїм підписом (одержувач має відкритий ключ центру і довіряє йому апріорі). Коли вузол видає іншому вузлу свій сертифікат, той перевіряє його дійсність перевіривши цифровий підпис центру сертифікації. Сертифікати мать термін дії, тому якщо він не був оновлений вчасно, то вважається недійсним, якому ризиковано довіряти. Окрім серверу, сертифікат може бути запрошений і від клієнта.
Тільки кореневі центри сертифікації мають бути апріорі відомі усім учасникам зв’язку. Їх сертифікати прошиті на рівні операційних систем пристроїв, і ці сертифікати, які засвідчують їх дійсність є самопідписаними (підписаними ними ж). Однак таких центрів не так багато щоб виділяти сертифікати усім бажаючим. Тому використовують ланцюжок центрів, коли кореневі центри сертифікації надають сертифікати іншим центрам сертифікації, засвідчуючи їх дійсність. Ці центри (некореневі) мають право надавати сертифікати учасникам зв’язку. Таким чином, наприклад, отриманий від серверу сертифікат може бути підписаний якимось невідомим для клієнта центром сертифікації. Клієнт запросить сертифікат від цього центру і якщо він підписаний кореневим центром, то сертифікату серверу можна довіряти.
Для створення сертифікату генеруються ключі за вибраним алгоритмом (файли .key
), формується файл запиту на підпис сертифікату .csr
, в якому зберігається відкритий ключ плюс інформація про компанію і власний домен. Цей файл відправляється в центр сертифікації, який підписує сертифікат своїм електронним підписом.
У веб-застосунках традиційно використовують сертифікати стандарту X.509
. Автентифікація за допомогою X.509
-сертифіката відбувається в момент з’єднання з сервером і є частиною наприклад того ж протоколу SSL/TLS
. Цей механізм також добре підтримується браузерами, які дозволяють користувачеві вибрати і застосувати сертифікат, якщо веб-сайт допускає такий спосіб автентифікації.
Під час автентифікації сервер виконує перевірку сертифіката на підставі наступних правил:
рис.12.6. Використання сертифікату для автентифікації.
Після успішної автентифікації веб-застосунок може виконати авторизацію запиту на підставі таких даних сертифікату (рис.12.7), як subject
(ім’я власника), issuer
(емітент), serial number
(серійний номер сертифіката) або thumbprint
(відбиток відкритого ключа сертифіката) .
рис.12.7. Приклад X.509 сертифікату.
Як вже зазначалося, кореневі центри сертифікації мають само-підписані сертифікати, вони за замовченням вже знаходяться в сховищах довірених сертифікатів на ОС. Якщо необхідно налагодити захищений зв’язок між учасниками у закритій системі, можна створити самопідписаний сертифікат і помістити його в сховище довірених сертифікатів. Інший спосіб - вказати застосунку, що можна довіряти самопідписаним сертифікатам.
Створити самопідписаний сертифікат можна за такою послідовністю:
завантажити і встановити OpenSSL (мін.версію)
req -newkey rsa:2048 -nodes -keyout c:/temp/domain.key -x509 -days 365 -out c:/temp/domain.crt
На стороні клієнта сертифікат разом з закритим ключем можуть зберігатися в операційній системі, в браузері, в файлі, на окремому фізичному пристрої (smart card, USB token). Зазвичай закритий ключ додатково захищений паролем або PIN-кодом.
Автентифікація за одноразовими паролями зазвичай застосовується додатково до автентифікації за паролями для реалізації двофакторної автентифікації (two-factor authentication (2FA)). У цій концепції користувачеві необхідно надати дані двох типів для входу в систему: щось, що він знає (наприклад, пароль), і щось, чим він володіє (наприклад, пристрій для генерації одноразових паролів). Наявність двох факторів дозволяє в значній мірі збільшити рівень безпеки, що можливо буде затребуване для певних видів веб-застосунків. Інший популярний сценарій використання одноразових паролів - додаткова автентифікація користувача під час виконання важливих дій: переказ грошей, зміна налаштувань і т.п.
Існують різні джерела для створення одноразових паролів. Найбільш популярні:
scratch card
зі списком заздалегідь сформованих одноразових паролів. Для кожного нового входу в систему потрібно ввести новий одноразовий пароль із зазначеним номером.У веб-застосунках такий механізм автентифікації часто реалізується за допомогою розширення автентифікації через форму: після первинної автентифікації за паролем, створюється сесія користувача, проте в контексті цієї сесії користувач не має доступу до застосунку до тих пір, поки він не виконає додаткову автентифікацію за одноразовим паролем.
Цей спосіб найчастіше використовується для автентифікації пристроїв, сервісів або інших застосунків при зверненні до веб-сервісів. Тут в якості секрету застосовуються ключі доступу (access key, API key) - довгі унікальні рядки, що містять довільний набір символів, що по суті замінюють собою комбінацію імені користувача та паролю.
У більшості випадків, сервер генерує ключі доступу за запитом користувачів, які далі зберігають ці ключі в клієнтських застосунках. При створенні ключа також можливо обмежити термін дії і рівень доступу, який отримає клієнтська програма при автентифікації за допомогою цього ключа.
Розглянемо приклад застосування автентифікації за ключем - хмарні сервіси Amazon Web Services (рис.12.8). Припустимо, у користувача є веб-застосунок, що дозволяє завантажувати і переглядати фотографії, і він хоче використовувати сервіс Amazon S3
для зберігання файлів. В такому випадку, користувач через консоль AWS може створити ключ, що має обмежений доступ до хмари: тільки читання / запис його файлів в Amazon S3. Цей ключ в результаті можна застосувати для аутентифікації веб-застосунку в хмарі AWS.
рис.12.8. Приклад застосування автентифікації за ключем.
Використання ключів дозволяє уникнути передачі пароля користувача стороннім застосункам (у прикладі вище користувач зберіг у веб-застосунку не свій пароль, а ключ доступу). Ключі мають значно більшу складність в порівнянні з паролями, тому їх практично неможливо підібрати. Крім того, якщо ключ був розкритий (скомпрометовано), це не призводить до компрометації основного облікового запису користувача - достатньо лише анулювати цей ключ і створити новий.
З технічної точки зору ключі можуть передаватися в різних частинах HTTP-запиту: URL-запиті, тілі чи заголовку. Як і в випадку автентифікації за паролем, найбільш оптимальний варіант - використання заголовків. У деяких випадках використовують HTTP-схему Bearer
для передачі токена в заголовку Authorization: Bearer [token]
. Щоб уникнути перехоплення ключів, з’єднання з сервером має бути обов’язково захищене протоколом SSL/TLS.
рис.12.9. Приклад автентифікації за ключем доступу, переданого в HTTP заголовку.
Існують більш складні схеми автентифікації за ключами для незахищених з’єднань. У цьому випадку, ключ зазвичай складається з двох частин: публічної і секретної (приватної). Публічна частина використовується для ідентифікації клієнта, а приватна частина дозволяє згенерувати підпис. Наприклад, за аналогією з схемою digest authentication
, сервер може послати клієнту унікальне значення nonce
або timestamp
, а клієнт - повернути хеш цього значення, обчислений з використанням секретної частини ключа. Це дозволяє уникнути передачі всього ключа в оригінальному вигляді і захищає від атак.
Такий спосіб автентифікації найчастіше застосовується при побудові розподілених систем, де один застосунок - провайдер сервісів(service provider) делегує функцію автентифікації користувачів іншому застосунку - сервісу/провайдеру автентифікації (identity provider або authentication service ). Провайдер сервісів (постачальник послуг) - застосунок, який надає доступ до своїх сервісів через API. Але замість того, щоб автентифікувати користувача безпосередньо, він користується сервісами провайдера автентифікації (рис.12.10):.
Типовий приклад цього способу - вхід в застосунок через обліковий запис в соціальних мережах. Тут соціальні мережі є сервісами автентифікації, а застосунок довіряє функцію автентифікації користувачів соціальним мережам. Наприклад в https://www.slideshare.net/ можна зайти через LinkedIn
або Facebook
.
Реалізація цього способу полягає в тому, що провайдер автентифікації (identity provider) надає достовірні відомості про користувача в вигляді маркера (токен, token), а застосунок провайдеру сервісів (service provider) використовує цей токен для ідентифікації, автентифікації і авторизації користувача.
рис.12.10. Приклад автентифікації «активного» клієнта за допомогою маркера, переданого за допомогою схеми Bearer: trust - дозвіл.
На загальному рівні, весь процес виглядає наступним чином (рис.12.11):
рис.12.11 Приклад автентификації «пасивного» клієнта шляхом перенаправлення запитів.
Далі, маркер працює на рівні сесії і може зберігатися в кукі-файлах.
Існує кілька стандартів, які в точності означують протокол взаємодії між клієнтами і застосунками провайдерів, а також формат підтримуваних маркерів. Серед найбільш популярних стандартів - OAuth, OpenID Connect, SAML, і WS-Federation. Деяка інформація про перші два наведені нижче.
Сам маркер зазвичай представляє собою структуру даних, яка містить інформацію про те, хто його згенерував, хто може бути одержувачем, термін дії та відомості про самого користувача (claims). Крім того, маркер додатково підписується для запобігання несанкціонованих змін і гарантій автентичності.
При автентифікації за допомогою маркера провайдер сервісів повинен виконати наступні перевірки:
У разі успішної перевірки провайдер сервісів виконує авторизацію запиту на підставі даних про користувача, що містяться в маркері.
Існує кілька поширених форматів маркерів для веб-застосунків, усі вони захищені шифруванням:
Стандарт OAuth (Open Authorization) означує механізм отримання доступу одного застосунку до іншого від імені користувача без необхідності вводу імені користувача та паролю.
OAuth дозволяє користувачам, як власникам ресурсів (resource owner
) роздавати клієнтським застосункам (client
) маркери доступу до власних даних , що розміщуються на серверах ресурсів (resource server
). Кожен маркер доступу надає доступ до конкретного серверу ресурсів (наприклад, сайту редагування відео) навіть до конкретних ресурсів на них (наприклад, тільки відео від конкретного альбому) та на означений термін (наприклад, на наступні 2 години). Це дозволяє користувачам надавати доступ клієнтським застосункам до їх інформації, що зберігається на інших серверах — провайдерів сервісів, не передаючи повною мірою самих даних та без застосування імені/паролю.
Перша версія стандарту розроблялася в 2007 - 2010 рр., а поточна версія 2.0 опублікована в 2012 р Версія 2.0 значно розширює і в той же час спрощує стандарт, але зворотно несумісний з версією 1.0. Зараз OAuth 2.0 дуже популярний і використовується повсюдно для надання делегованого доступу і третє-сторонньої автентифікації користувачів.
У загальному весь процес складається з декількох кроків (рис.12.12.):
resource owner
) дає дозвіл клієнтському застосунку (client
) на доступ до певного ресурсу у вигляді гранту. Що таке грант, розглянемо трохи нижче.рис.12.12. Взаємодія компонентів у стандарті OAuth.
Стандарт описує чотири види грантів, які означують можливі сценарії застосування:
username/password
користувача. Може застосовуватися, якщо застосунок є «інтерфейсом» для сервера ресурсів (наприклад, застосунок - мобільний клієнт для Gmail).Стандарт не означує формат маркеру, який отримує застосунок: в сценаріях, адресованих стандартом, з застосунком немає необхідності аналізувати маркер, так як він лише використовується для отримання доступу до ресурсів. Тому ні маркер, ні грант самі по собі не можуть бути використані для автентифікації користувача. Однак якщо з застосунком необхідно отримати достовірну інформацію про користувача, існують кілька способів це зробити:
/me
у Facebook API). Застосунок може виконувати цю операцію кожного разу після отримання маркеру для ідентифікації клієнту. Такий метод інколи називають псевдо-автентифікацією.Варто зауважити, що OpenID Connect, який замінив попередні версії стандарту OpenID 1.0 і 2.0, також містить набір необов’язкових доповнень для пошуку серверів авторизації, динамічної реєстрації клієнтів і управління сесією користувача.
1) Які процедури входять до керування ідентифікацією та доступом? Поясніть їх призначення. 2) У чому полягає автентифікація користувачів за паролем? 3) Розкажіть про механізм автентифікації HTTP Basic. Які переваги та недоліки такої схеми? 4) Розкажіть про механізм автентифікації через форми. Які переваги та недоліки такої схеми? 5) Яким чином можуть передаватися дані користувача, паролі, маркери та інше через HTTP? Які з них найкращі і чому? 6) Розкажіть про поширені вразливості і помилки реалізації автентифікації. 7) Розкажіть про призначення і принципи шифрування. 8) Розкажіть про симетричне та асиметричне шифрування і приклади їх використання. 9) Що таке хеш, хеш-функції? Як їх використовують для захисту передачі даних? 10) Розкажіть про принципи функціонування протоколів TLS/SSL та їх використання в обміні даними. 11) Розкажіть навіщо потрібні сертифікати при обміні даними. Що собою представляють сертифікати? 12) Що таке електронний цифровий підпис? Як функціонує механізм цифрової підписки? 13) Як функціонує механізм підписування сертифікатів з використанням органів (центрів) сертифікації? Чим відрізняються кореневі центри сертифікації від звичайних? 14) Як відбувається перевірка дійсності сертифікату? 15) Яка інформація використовується при генеруванні сертифікату? 16) Що таке самопідписаний сертифікат? Як можна використовувати самопідписаний сетифікат? 17) Розкажіть про принципи автентифікації за одноразовими паролями та двофакторної автентифікації. 18) Розкажіть про принципи автентифікації за ключами доступу (API key). 19) Розкажіть про принципи автентифікації за маркерами. 20) Розкажіть про взаємодію компонентів у стандарті OAuth2.