1

我想問一個問題以確認我對如何使用範圍和索賠(角色)的理解。比方說,我有一個用戶(具有隻讀權限的用戶A,即適合的只讀角色),Windows服務(具有隻讀訪問權限的客戶端A),MVC站點(具有完全訪問權限的客戶端B)以及Web API。我希望Web API可以被具有完全訪問權限和只讀訪問權限的用戶和客戶端訪問。範圍和索賠(再次!)

  1. 我創建兩個作用域 「sampleApi.full和 」sampleApi.read_only「
  2. 我創建兩個角色 」full_access「 和 」READ_ONLY「
  3. 我配置的Web API與RequiredScopes =新[] {」 sampleApi.full 「 」sampleApi.read_only「}

當客戶端A連接到Web的API,它通過一個含有訪問令牌範圍 」sampleApi.read_only「 我可以使用[ScopeAuthorize(」 sampleApi.full) ]或ScopeAuthorize(「sampleApi.full,sampleApi.read_only」)]在我的類和方法來微​​調可訪問性。沒問題。

但是,當用戶A登錄時,他/她「繼承」客戶端B的範圍。因此,訪問令牌包含「sampleApi.full」,「sampleApi.read_only」和角色「read_only」。

現在我在WebApi中遇到了一個問題,那就是我需要在用戶調用時採取不同的行爲。在這種情況下,我忽略範圍並使用他/她的角色,並且用戶獲得「read_only」訪問權限,這正是我想要的。

這是正確的,它不再有意義使用ScopeAuthorize屬性,我需要做沿東西線的自定義混合屬性:

如果來電是一個用戶 - 然後用角色來確定無障礙 其他 - 使用示波器確定可訪問性

還是我完全誤解了?

回答

8

範圍模型允許客戶端(非用戶)訪問的內容。它們表現爲令牌中的主張。用戶的聲明也在令牌中。資源中的授權將基於允許客戶做什麼和允許用戶做什麼的組合。而已。