2014-04-03 31 views
2

我正在用Django Rest Framework在Django中開發我的第一個不重要的API接口。我正在嘗試創建一個Web服務,爲我的遊戲託管高分表。然後遊戲將通過API發佈並通過http請求獲取高分。將OAuth2令牌限制在Django中的特定模型/視圖

此刻我的模型結構看起來是這樣的:

  • 遊戲
    • Highscoretable
      • HighscoreEntry

現在正弦e服務將處理多個不同遊戲的分數,我想爲每個遊戲分別提供一個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,以便在請求到達時,我可以將請求者的令牌與Game自己的令牌進行比較?如果是這樣如何?

tl; dr;如何爲具有唯一oauth2標記的模型創建自定義權限類?這樣每個標記都會賦予其相應模型的權限。

回答

0

爲了控制訪問令牌權限,您應該使用範圍。訪問令牌範圍的思想是根據訪問令牌範圍給予定義的一組操作,資源和任何(由你自己決定)權限。在你的情況下,你應該爲不同的遊戲提供不同的範圍。請注意,作用域本身不會限制用戶使用某些端點,服務等。範圍限制的應用方式取決於OAuth20提供程序。

+0

感謝您的澄清。我檢查了django-oauth2提供者的文檔,但找不到如何在實踐中使用範圍界定的任何示例。 – Tumetsu

+0

您可以檢查ApiFest項目 - http://apifest.com。它是開源的,純Java - https://github.com/apifest。使用文檔,您可以輕鬆啓動服務器並嘗試使用它。它支持範圍。 – rossa