nazarpc
@nazarpc
Open Source enthusiast

OAuth 2 + guest access

Есть API, доступ к нему предоставляется по access_token+client_id+client_secret, согласно OAuth 2.
А что если доступ к API должны иметь и гости, при этом нужно знать, что несколько запросов приходят от того же гостя?
Можно ли сделать метод типа access_guest_token? Интересует именно решение в рамках OAuth 2, чтобы не городить лишнего, что-то не могу найти в спецификации.

Если чего путаю — поправьте.
  • Вопрос задан
  • 3521 просмотр
Пригласить эксперта
Ответы на вопрос 2
blo
@blo
инженер-программист
Вообще без подробного описания сложно что-то толковое предложить, но на вскидку — почему гости тоже не могут использовать access_token+ зарезервированный гостевой client_id?
Ответ написан
Talyutin
@Talyutin
Мне кажется, что в спецеификации не оговаривается, что client_id — это тип или класс приложения (мобильное или ваше серверное). Зато явно сказано, что client_id выдается сервером клиенту. Поэтому ничто не мешает завести client_class_id в первом запросе на получение client_id и, если надо, client_secret. client_class_id как раз будет обозначать, что это мобильное приложение.
К тому же содержание пункта tools.ietf.org/html/rfc6749#section-2.3.1 как раз напоминает ранее известную и привычную схему логин: пароль.
В итоге каждый пользователь сразу же получает свой client_id, который, кстати, и будет потом передаваться со всеми остальными запросами согласно спецификации.
Пример:

клиент отправляет
POST xxx/oauth/credentials
в теле client_class_id=12sdfs31sdfsd23&остальные идентификаторы&всякие модели&типы и сопотствующая информация
получает client_id=cid и client_secret.

далее, если клиенту нужно залогиниться, то он отправляет
POST xxx/login?response_type=code&redirect_uri=yyy://zzz&client_id=cid
в теле login=vasya&password=123
Если он гость, то что-нибудь другое отправляет.
получает HTTP/1.1 302 Found
Location: yyy://zzz?code=vasya_code

далее запрашивает POST xxx/oauth/token с grant_type=authorization_code&code=vasya_code&redirect_uri=yyy://zzz все как обычно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы