Мене конкретно цікавить, як користувачі виконують авторизовані / автентифіковані операції у веб-API.
Чи сумісні файли cookie аутентифікації з філософією REST, і чому?
Мене конкретно цікавить, як користувачі виконують авторизовані / автентифіковані операції у веб-API.
Чи сумісні файли cookie аутентифікації з філософією REST, і чому?
Відповіді:
Ідеальний сервіс ReSTful дозволяє клієнтам (які можуть бути не в браузері) виконувати будь-які необхідні завдання за один запит ; тому що повний стан, необхідний для цього, веде клієнт, а не сервер. Оскільки клієнт має повний контроль над державою, він може створити стан самостійно (якщо це законно), і лише поговорити з API, щоб "зробити це".
Потрібні файли cookie можуть ускладнити це. Для клієнтів, окрім браузерів, керування файлами cookie - це досить велика незручність у порівнянні з параметрами запитів, простими заголовками запитів або тілом запиту. З іншого боку, у веб-переглядачі використання файлів cookie може зробити багато речей набагато простішими.
Таким чином, API може спочатку шукати в Authorization
заголовку потрібні йому дані аутентифікації, оскільки це, мабуть, місце, де клієнти, які не користуються браузером, віддадуть перевагу, але щоб спростити та упорядкувати клієнтів на основі браузера, він також може перевірити наявність сеансового файлу cookie для входу на сторону сервера, але тільки якщо Authorization
відсутній звичайний заголовок.
Іншим прикладом може бути складний запит, який зазвичай вимагає безлічі параметрів. Неінтерактивний клієнт не матиме жодних проблем збивати всі ці дані в один запит, але інтерфейс на основі форми HTML може вважати за краще розбити запит на кілька сторінок (щось на зразок набору сторінок "майстра"), щоб користувачі не були представлені з опціями, які не застосовуються на основі попередніх виборів. Всі проміжні сторінки можуть зберігати значення у файлах cookie, так що лише сама остання сторінка, де користувач фактично подає запит, взагалі має будь-який побічний ефект сервера. API може шукати необхідні атрибути в тілі запиту та повертатися до перегляду файлів cookie, якщо потрібних параметрів не було.
Редагувати: у коментарі RE до @ Konrad нижче:
Маркери порівняно важче реалізувати, особливо тому, що ви не можете легко визнати недійсним маркер, не зберігаючи їх десь.
е ... Ви перевіряєте файли cookie на стороні сервера, правда? Тільки тому, що ви сказали браузеру відмовитись від файлу cookie через 24 години, це не означає, що це станеться. Цей файл cookie може бути збережений високотехнічним користувачем та повторно використаний довгий час, коли він "закінчився".
Якщо ви не хочете зберігати дані сеансу на стороні сервера, слід зберегти їх у маркері (cookie чи іншим способом). Автономний жетон аутентифікації іноді називають Макаруном. Як це передається між клієнтом і сервером (будь то cookie, як додаткові заголовки, або в самій суті запиту), абсолютно не залежить від самого механізму аутентифікації.
HttpClient
в .NET ви можете використовувати файли cookie без будь-яких проблем, і вам не потрібно думати про це. Маркери порівняно важче реалізувати, особливо тому, що ви не можете легко визнати недійсним маркер, не зберігаючи їх десь.
curl
або wget
керування файлами cookie є незручним, і вам справді доведеться думати про них купу. Я відповів на ваш інший пункт, відредагувавши мою відповідь.
Так і Ні - Залежить від того, як ви його використовуєте.
Файли cookie, якщо вони використовуються для підтримки стану клієнта у клієнта, для клієнта, клієнта та клієнта, вони знаходяться у спокої.
Якщо ви зберігаєте стан сервера у файлі cookie, ви, як правило, просто перекладаєте навантаження на клієнта - що не викликає спокою.
То які приклади є?
Відпочивали:
Не відпочиває:
Спокій приходить від безгромадянства - сервера. Клієнти можуть підтримувати стан програми та відправляти його на сервер, щоб сказати, де вони знаходяться, щоб сервер міг вирішити, куди звернутися звідти. В основному сеанси / штати потребують історичних даних і залежать від минулих запитів, так би мовити, спокійних додатків в ідеалі немає (це не є можливим мати 100% чистий спокійний додаток, якщо ви збираєтесь мати екран входу :)
Можна використовувати файли cookie. REST дозволяє їм.
REST вимагає, щоб будь-яка інформація про сеанс зберігалася на стороні клієнта, але коли мова заходить про автентифікацію, певна інформація повинна залишатися на стороні сервера з міркувань безпеки.
З одного з моїх публікацій в блозі є загальна згода, що дані аутентифікації вважаються поза межами REST. Отже, нормально для серверів тримати деякі дані цього сеансу на своїй стороні.