簡體   English   中英

如何檢查來自非圖形 Azure AD 令牌的用戶是否是 APIM 策略中 email 分發列表的成員

[英]How do I check if the user from a non-Graph Azure AD token is a member of an email distribution list in an APIM policy

在 Azure API 管理 (APIM) 中有一個 API。 API 操作使用來自后端應用程序注冊的 scope(scope不是User.Read )驗證由 Azure Active Directory (AAD) 生成的 JWT。 注意:client id 是另一個應用程序注冊,它是該后端 scope 的授權應用程序。

驗證 JWT 后,我是否可以獲取該令牌,從中提取用戶信息並驗證用戶是否屬於 email 分發列表 (DL)? 如果是這樣,如何在 APIM 政策中做到這一點?

我知道 MS Graph API。 使用 Postman 我可以確認 DL 列在租戶的組中並且可以獲得其組 ID。 我還可以確認用戶是該組的成員。 我對 Graph API 堅持的一點是,它需要一個與客戶端應用程序提供的令牌不同的令牌(由於他的范圍來自不同的域,自定義應用程序注冊與圖表),我被困在這一點上。 我是否應該讓客戶端應用程序也獲得圖形令牌並將其傳遞到單獨的 header 中,或者有沒有辦法從 APIM 或其他東西中進行編排?

此解決方案的非 APIM 部分由Microsoft 文章提供。 我在以下步驟中總結了這些內容並結合了 APIM 部分:

  1. 在Azure新建一個Azure App Registration(注意后面的client id)
  2. 在“Certificates and secrets”下,添加一個client secret(記下這個secret以備后用)
  3. 在“API 權限”下,添加一個新的MS Graph 應用程序權限(可以是User.Read.AllGroup.Read.AllGroupMember.Read.All ,具體取決於您的情況)。 MS Graph 的“組”包括 AD 組和分發列表 (DL)。 注意:不要使用委托權限。
  4. 應用程序權限允許授權的應用程序查詢任何用戶/組。 您將需要一個 Azure 管理員來授予管理員對應用程序注冊的同意,以獲得所選的應用程序權限。
  5. 現在在 Azure APIM,go 到您的 API 並編輯入站政策。
  6. 驗證來自進行調用的用戶的 JWT(請參閱validate-jwt或更新validate-azure-ad-token )以確保用戶有權調用此 API。
  7. 從 JWT 中提取oid聲明(這是我將用於圖形調用的用戶 ID)並使用set-variable策略將其保存在一個變量中
  8. 使用client-credentials流添加send-request策略請求 MS Graph 的身份驗證令牌(此時您需要來自早期應用程序注冊的客戶端 ID 和密碼)。 注意:機密應存儲在像 KeyVault 這樣的安全存儲中,但不在本答案的 scope 范圍內。
  9. 從 JSON 響應主體中提取access_token字段,並使用set-variable策略將其放入變量中。
  10. 創建另一個send-request策略,但這次發送到 MS Graph 端點。 對於User.Read.All權限,您將使用/users/<userIdFromJwtOidClaim>/memberof/<groupId> MS Graph v1.0 API Reference ,並使用<set-header>元素在 Authorization header 中傳遞access_token
  11. 狀態代碼 200 表示用戶是該組的成員。 IIRC 狀態代碼 403 表示用戶不是該組的成員。
  12. 使用choose策略根據用戶的組成員身份執行邏輯。
  13. 使用return-response策略將響應發送回用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM