2017-08-02 90 views
0

什麼是編碼資源級別的權限爲JWT access_token的正規途徑?換句話說,你如何最好地編碼訪問其他人的資源?如何建模JWT OAuth2令牌中的資源級權限?

它是這樣的:

{ 
    scopes: { 
    me: ['user', 'repo'],  // My user 
    repo123: ['repo'],   // Someone else's repo 
    org541: ['admin', 'repo'], // My org 
    org206: ['repo:read']  // Someone else's org 
    } 
} 

還是這個樣子,與命名空間範圍標籤(在這種情況下<resource>|<scope>

{ 
    scopes: ['me|user', 'me|repo', 'repo123|repo', 'org541|admin'... etc] 
} 

或者別的東西再

這同樣適用到「角色」或「會員」或類似的標籤(我意識到我已經混合了上面的例子) - 核心問題仍然是如何(最好)區分這些標籤每個資源在一個JWT access_token

+0

我是否理解正確的話,你必須對他們的訪問控制列表(ACL)某些對象。你想創建一個JWT來反映這些ACL在令牌發行時的狀態嗎?你爲什麼想這樣做? –

+0

@JánHalaša是的,大致正確。目的是爲了封裝用戶的權限,不僅限於該用戶擁有的資源,還包括他們已被授權訪問的資源(例如,我邀請您編輯我的回購)。 – papercowboy

回答

1

我不知道你需要實現精確的用例,但我可能會盡量保持範圍只是API操作。如「獲取存儲庫列表」。然後,使用訪問令牌的客戶端可以列出它可以使用的存儲庫,並且資源服務器通過用戶名或用戶組驗證訪問權限。

如果你想限制提供給客戶的資源,你可以有,將允許訪問只是一個子集(例如只是用戶自己的信息庫)的作用域。在範圍編碼

擁有的資源和他們的權限會令他們很難用(合成認證請求時,客戶端必須知道資源標識符)和權限可能在訪問令牌的一生都在變化。