2

我正在通過OAuth 2.0協議與Azure AD合作,並且還創建了一個服務/ Dameon應用程序來處理Microsoft Graph SDK的身份驗證過程。對於服務/守護進程,我製作了一個HttpWebRequest並傳遞了client_idclient_secret以生成一個access_token,然後我可以提供給Microsoft Graph SDKAzure AD - 具有守護程序服務和授權碼授予流程的多租戶,目標租戶是否可以生成client_secret?

我也已經成功地創建對應的服務主體到目標租戶,其中管理員已授予的權限,以使用授權代碼准予流應用程序。該應用程序然後在(portal.azure.com)內的Overview -> Quick tasks -> Find an enterprise app中顯示。

我的問題是,我可以利用服務/守護進程的方法,同時也允許目標租戶的管理員授權應用程序,這將允許目標租戶創建一個client_secret通過,這將是唯一的房客?

回答

3

簡短的回答是沒有。當管理員地同意你的多租戶應用程序:

  1. 服務主要是爲在他們的租戶
  2. 權限由應用要求建立在租戶被授予

這意味着你的應用程序可以現在也可以通過其客戶端憑據(id + secret)對其租戶進行身份驗證。因此,所有批准的租戶都使用相同的密鑰。

這意味着您的應用程序可以在任何給定時間免費獲取任何訪問令牌,無論是誰登錄。所以它會爲您的應用程序承擔一些責任,以保持數據分離。

如果您從https://login.microsoftonline.com/company.com/oauth2/token獲得訪問令牌,則生成的令牌將包含該租戶的標識符。而像Microsoft Graph API這樣的API只會爲該租戶提供該令牌的數據。因此,您的應用必須確保只使用擁有與用戶的租戶ID聲明相同的租戶ID的令牌。

+0

如果是這種情況,那麼租戶是否會限制其他租戶用戶的查看? – jdave

+0

編輯我的問題。應用程序權限使您的應用程序有責任爲預定租戶的數據獲取令牌。如果使用委託權限(守護進程不是這種情況),那麼就不用擔心了,因爲您將始終以用戶身份進行調用。 – juunas

0

我會說juunas的答案是99%正確的。簡短的回答基本上是否定的,他所提及的考慮也是可靠的。

但我相信在某些考慮因素下這在技術上是可行的。當管理員同意守護程序服務時,服務負責人將在客戶的租戶中創建。服務主體確實允許添加可用作每個租戶基礎上的客戶機密的憑證。問題是,沒有真正的方法可以通過程序從應用程序中以編程方式向服務主體添加憑證。您必須讓管理員運行一些腳本來將新憑證添加到其承租人的服務主管。

即使你經歷了所有這些,你仍然需要確保你的服務在客戶/租戶的基礎上被隔離。從安全角度來看,如果您的單一守護進程可以訪問所有的祕密,那麼創建每個租戶的客戶機密信息是毫無意義的。

相關問題