Найкращий спосіб здійснити автентифікацію для REST API


21

Ми розробляємо соціальні програми для мобільних пристроїв. Кожна програма споживає веб-послуги RESTful API. Коли я здійснюю логін, я зазвичай зберігаю ім'я користувача та пароль десь на пристрої. Потім я надсилаю їх і як відповідь отримую доступ до свого профілю. Але я також знаю, що є інший спосіб зробити це.

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

Як я повинен це здійснити? Чи слід надсилати цей маркер разом із будь-яким іншим запитом, окрім входу?


11
Це аутентифікація , а не авторизація . Автентифікація = доведіть, що ви є тим, ким ви кажете, що є. Авторизація = доведіть, що вам дозволяється робити те, що ви просили.
tdammers

Я просто збирався додати такий самий коментар до відповідей! +1 вам @tdammers Я відредагував увесь вміст, щоб авторизація Google не привела вас сюди
Shiplu Mokaddim,

Відповіді:


14

Існує кілька способів здійснення автентифікації в контексті RESTful, і безпечніше надсилати лише маркери замість логіна / пароля: ви можете легко зробити токени недійсними за таймаутом чи за іншими критеріями та попросити користувача повторно підтвердити автентифікацію .

Наприклад, аутентифікація REST-запитів за допомогою HMAC . При такому підході клієнт матиме відкриті та секретні ключі . До всіх запитів, які потребують автентифікації , слід додати ключ publiс та використовувати секретний ключ для обчислення хешу вашого запиту

var myRequest = "https://myserver/resource?publicId=12345&param=value";
var requestHash = hmac_implementation(myRequest);
myRequest = myRequest + '&hmac=' + requestHash;

Тепер сервер може ідентифікувати запит за відкритим ключем і обчислити requestHash сам . Якщо обидва хеші рівні, користувач має авторизацію.

До речі, вам також доведеться використовувати https для захисту зв'язку через комп'ютерну мережу - це драматично зменшить кількість можливих проблем.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.