0

我正在使用Azure AD OAuth2授權來保護我的Web API。現在我需要支持兩個OAuth2用戶的情況(流) -Azure AD OAuth客戶端憑據流訪問控制

  1. Web應用程序訪問Web API,並根據用戶的角色將成爲一個資源的API。 這是使用授權oauth流實現的,訪問控制是使用授權[Role =「Read」]屬性完成的

  2. 訪問相同Web API的守護進程(控制檯)應用程序。雖然我能夠通過使用客戶端證書的OAuth流得到一個道理,但我無法弄清楚如何一旦令牌是控制檯可以從字面上訪問任何的問題,管理訪問守護進程

API方法。

範圍 - 當grant_type是「client_credentials」範圍不是參數/令牌端點 角色 - 不能使用它,因爲這是與用戶相關聯

有人可以請建議,我們如何能在客戶端進行訪問控制憑證流?以及如何同時滿足要求1和要求2

回答

1

您可以爲Azure AD中API清單中的用戶和應用程序定義「角色」。

如果您想知道應用程序角色實際上是應用程序權限。

所以,你可以在你的API清單是這樣的(其他屬性爲清楚起見移除):

{ 
    "appRoles": [ 
    { 
     "allowedMemberTypes": [ 
     "Application" 
     ], 
     "displayName": "Read all things", 
     "id": "32028ccd-3212-4f39-3212-beabd6787d81", 
     "isEnabled": true, 
     "description": "Allow the application to read all things as itself.", 
     "value": "Things.Read.All" 
    }, 
    { 
     "allowedMemberTypes": [ 
     "User" 
     ], 
     "displayName": "Read things", 
     "id": "ef8d02ff-eee1-6745-9387-96587c358783", 
     "isEnabled": true, 
     "description": "Allow the user to read things.", 
     "value": "Things.Read" 
    } 
    ] 
} 

所以我們定義一個角色,只允許應用程序作爲其成員。這是一個應用程序許可。另一個是可以提供給用戶和組的角色。

然後您可以爲用戶提供Read things角色,並且守護進程控制檯應用程序讀取所有事物應用程序權限。並且你實現了兩種場景:)

通過轉到企業應用程序 - >您的API->用戶和組 - >添加用戶,您可以將角色添加到用戶/組。選擇你想要的用戶/組,然後爲他們選擇一個角色(如果你只有一個,它將被預選)。

After adding the role, the user will show up in the list

您通過尋找其他應用程序的App註冊 - >必需permissions->添加 - >找到你的API - >選擇 - >檢查您先前從列表中定義的應用程序的權限添加應用程序的權限。然後,您可以按授予權限按鈕來授予應用程序角色。

Permissions required by the Web App on the API

你再在角色的價值索賠這兩種情況下。

所以角色要求看起來像這樣在第一種方案:

"roles": [ 
    "Things.Read" 
    ], 

像這樣在第二個場景:

"roles": [ 
    "Things.Read.All" 
    ], 
+0

這將在方案1中工作,但如何做這工作客戶端憑據流?假設我有一個客戶端應用程序應該具有「讀取」訪問權限,另一個客戶端需要「寫入」訪問權限,我在哪裏指定映射?我們可以在Azure門戶中定義此訪問嗎?或者客戶端是否可以請求令牌請求中的讀/寫權限? – Anoop

+1

將應用程序權限添加到Azure AD中的控制檯應用程序並授予該權限後,使用客戶端憑據獲取的令牌應該包括角色。 – juunas

+0

只是爲了確保這個工作,我記得我測試過這個。在這兩個標記中,您將獲得一個角色數組,其中包含角色中定義的值。所以在這種情況下要麼Things.Read要麼是Things.Read.All。 :) – juunas

相關問題