Ми будуємо послугу відпочинку та хочемо використовувати OAauth 2 для авторизації. Поточний проект (v2-16 від 19 травня) описує чотири типи гранту . Вони є механізмами або потоками для отримання авторизації (маркера доступу).
- Код дозволу
- Неявний грант
- Повноваження власника ресурсу
- Повноваження клієнта
Здається, нам потрібно підтримати всіх чотирьох, оскільки вони служать різним цілям. Перші два (і, можливо, останній) можна використовувати із сторонніх програм, які потребують доступу до API. Код авторизації - це стандартний спосіб авторизації веб-програми, якій пощастило знаходитись на захищеному сервері, тоді як неявний потік надання буде вибором для клієнтської програми, яка не може повністю тримати свої конфіденційні дані (наприклад, мобільний / настільний додаток, клієнт JavaScript тощо).
Ми хочемо використовувати третій механізм, щоб забезпечити кращу взаємодію з користувачами на мобільних пристроях - замість того, щоб переводити користувача у діалогове вікно входу у веб-браузері тощо, користувач просто введе своє ім’я користувача та пароль безпосередньо в програму та логін. Ми також хочемо використовувати тип надання клієнтських даних, щоб отримати маркер доступу, який можна використовувати для перегляду загальнодоступних даних, не пов'язаних з жодним користувачем. У цьому випадку це не стільки авторизація, скільки щось схоже на ключ API, який ми використовуємо для надання доступу лише тим програмам, які зареєструвались у нас, даючи нам можливість скасувати доступ за потреби.
Тож мої запитання:
- Чи вважаєте ви, що я правильно зрозумів призначення різних видів грантів?
- Як ви можете зберегти конфіденційність своїх даних клієнта? І в третьому, і в четвертому випадку нам потрібно мати ідентифікатор клієнта та секрет клієнта десь на клієнті, що не звучить як гарна ідея.
- Навіть якщо ви використовуєте неявний тип надання та не розкриваєте секрет клієнта, що заважає іншій програмі видавати себе за ваш додаток за допомогою того самого механізму авторизації та ідентифікатора клієнта?
Підводячи підсумок, ми хочемо мати можливість використовувати облікові дані клієнта та облікові дані власника ресурсу з клієнтської програми. Обидва ці потоки вимагають від вас хоч якось зберігати таємницю клієнта, але клієнт - це мобільний додаток або додаток JavaScript, тому їх легко можна вкрасти.