Привет!
Пытаюсь разобраться в вопросах аутентификации/авторизации. Расскажу на примере.
1. Допустим есть некий (микро)сервис, например, блог. У этого сервиса есть внешний REST API
https://acme.com/api/blog.
2. С точки зрения бизнес логики, писать новые посты в блог может только администратор (роль admin). Обычные залогиненные пользователи (роль signed_user) могут комментить, гости могут просто читать.
3. Есть необходимость написать а) SPA админку, б) Общий "обычный" фронтэнд, в) Native app для андроида и яблока.
Доступ к API, ясное дело, контролируется access token'ом в заголовке запроса.
Вопрос в методике получения этого токена. На практически любой поиск на тему AuthN/AuthZ в гугле вылезают статьи по прикручиванию протокола (если это можно так назвать) Oauth2. Но я не понимаю, зачем он здесь. Oauth2 позволяет условной Маше позволить условному сервису "мои котики" ходить в ее (Маши) профиль Вк и постить там от лица Маши фотографии этих самых котиков. То есть это протокол делегирования полномочий. Я знаю о "надстройке" поверх него OpenID Connect, но всё равно не вижу применения в моей ситуации этого решения.
Перво-наперво меня смущает идеология scop'ов. В случае делегирования Машей полномочий сервису "мои котики" она позволит Вк лишь постить картинки, но не читать переписку, скажем. В моём же случае, пользователи действуют явно (админ - пишет, юзвери - комментят, гости - читают). Делают они это осознанно, непосредственно. И никаких скоупов я не могу вывести из их ролей. Ну то есть, скажем, если есть какой-то чисто админский ресурс типа
https://acme.com/api/stats, то туда всё равно никто не сможет попасть, не передав access_token с нужной ролью.
Другими словами, мне бы от Oauth2 пригодился бы только flow получения двух токенов (ведь refresh token тоже потребуется для native приложений), без упоминания scope.
Есть ли вообще примеры аутентификации/авторизации для REST API без контекста делегирования полномочий? Или всё так или иначе выливается в этот пресловутый Oauth2 + OpenID Connect в любом случае, если API открытое?