Я розробляю API REST, для якого потрібна автентифікація. Оскільки сама аутентифікація відбувається через зовнішню веб-службу через HTTP, я аргументував, що ми видаватимемо маркери, щоб уникнути повторного виклику служби аутентифікації. Що чітко підводить мене до мого першого питання:
Це справді краще, ніж просто вимагати від клієнтів використання HTTP Basic Auth для кожного запиту та кешування викликів на стороні сервера служби аутентифікації?
Рішення Basic Auth має перевагу в тому, що не потрібно проводити повну поїздку до сервера, перш ніж розпочати запити на вміст. Токени потенційно можуть бути більш гнучкими за обсягом (тобто надавати лише права на певні ресурси чи дії), але це здається більш відповідним контексту OAuth, ніж мій простіший варіант використання.
В даний час жетони набуваються так:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
api_key
, timestamp
І verifier
потрібно все запити. "Верифікатор" повертається:
sha1(timestamp + api_key + shared_secret)
Мій намір полягає в тому, щоб дозволяти лише дзвінки відомих сторін і не допускати повторного використання дзвінків.
Це досить добре? Недолік? Перевищення?
Маючи жетони в руці, клієнти можуть придбати ресурси:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
Для найпростішого можливого дзвінка це видається жахливо багатослівним. З огляду на те, що shared_secret
бажання буде вбудовано в (як мінімум) додаток для iOS, з якого я б припустив, що його можна витягти, чи це навіть пропонує щось, що не відповідає помилковому почуттю безпеки?