Ограничить токен OAuth2 определенными моделями/представлениями в Django

Я разрабатываю свой первый более чем тривиальный API-интерфейс в Django с Django Rest Framework. Я пытаюсь создать веб-сервис, в котором размещаются таблицы рекордов для моих игр. Затем игры будут публиковать и получать свои рекорды через http-запросы через API.

На данный момент структура моей модели выглядит примерно так:

  • Game
    • Highscoretable
      • HighscoreEntry

Теперь, поскольку служба будет обрабатывать множество разных игр, я хотел бы предоставить отдельный токен oauth2 для каждой игры и ограничить разрешения API для этой игры. Мне удалось настроить аутентификацию oauth2 с помощью этого руководства: http://www.django-rest-framework.org/api-guide/authentication

Однако на данный момент кажется, что он дает доступ ко всему API. Затем я проверил http://www.django-rest-framework.org/api-guide/permissions , где есть упоминание о том, что для ограничения разрешений на подмножество функций мне нужны настраиваемые классы разрешений.

Основываясь на этой информации, я попытался найти в Google примеры того, как это сделать с помощью oauth2. На той же странице был пример пользовательского класса. Однако я понятия не имею, как применить его к oauth2. Могу ли я каким-то образом установить определенный access_token для моей игровой модели, чтобы при поступлении запроса я мог сравнить токен запрашивающей стороны с собственным токеном игры? Если да, то как?

тл;др; Как создать пользовательские классы разрешений для моделей с уникальными токенами oauth2? Чтобы каждый токен давал права соответствующей модели.


person Tumetsu    schedule 03.04.2014    source источник


Ответы (1)


Чтобы контролировать разрешения токенов доступа, вы должны использовать область действия. Идея области маркера доступа состоит в том, чтобы предоставить права на определенный набор операций, ресурсов и т. д. (это зависит от вас) на основе области маркера доступа. В вашем случае вы должны предоставить разные области видимости для разных игр. Обратите внимание, что сама область действия не ограничивает пользователя некоторыми конечными точками, службами и т. д. Способ применения ограничений области зависит от поставщика OAuth20.

person rossa    schedule 03.04.2014
comment
Спасибо за разъяснение. Я проверил документацию поставщика django-oauth2, но не смог найти примеров того, как использовать область видимости на практике. - person Tumetsu; 03.04.2014
comment
Вы можете проверить проект ApiFest — apifest.com. Это чистая Java с открытым исходным кодом — github.com/apifest. Используя документацию, вы можете легко запустить сервер и опробовать его. Он поддерживает области. - person rossa; 10.08.2014