2016-11-18 58 views
0

我正在爲我的公司嘗試Azure AD B2B功能。我試圖通過門戶邀請外部用戶並使用https://graph.microsoft.com/beta/invitations。在這兩種情況下,都會成功邀請用戶並添加到我們的目錄中登錄用於社交帳戶(然後使用Microsoft帳戶)。如果它是一個非社交帳戶(又名contoso.com),它沒有以前的Azure AD,那麼當我們的應用程序嘗試登錄用戶時,我會得到一個access_denied。如果我試圖強制許可流程,我得到以下信息:來自非託管Azure AD目錄的用戶是否可以登錄位於不同目錄中的Azure AD多租戶應用程序?

AADSTS65005:目前不支持您 公司aaa.no.應用ZZZ您的公司目前處於非託管狀態,並且 需要管理員通過DNS 驗證aaa.no才能配置應用程序zzz之前聲明公司的所有權。

我們有許多小公司作爲客戶,他們都必須在用戶使用我們的應用程序之前管理Azure AD目錄,這似乎是不合理的。它應該根據Microsoft得天衣無縫:

無痕:誰需要訪問公司的應用 不需要有Azure的AD的合作伙伴公司。 Azure AD B2B協作提供簡單的用戶註冊體驗,爲這些合作伙伴提供即時訪問您的應用程序的 。

如果他們可以註冊並創建他們的用戶和目錄,他們爲什麼不能讓他們被邀請同意登錄的應用程序(登錄並閱讀用戶配置文件委託權限是必需的應用程序)?

我們已經允許擁有自己託管的Azure AD的公司在我們的應用程序中使用他們的用戶。我們讓全球管理員允許管理員同意我們的應用程序,以便他們可以登錄用戶並閱讀目錄數據。這些用戶不會被添加到我們的目錄中,並且完美地工作。另外,如果我以受邀用戶身份前往新門戶網站,則可以看到域aaa.no已通過驗證,但我無法將其設置爲主要網站。

我嘗試過的其他事情沒有工作:升級到最新的ADAL版本,試圖在https://apps.dev.microsoft.com中創建應用程序並使用它,試圖在舊的天藍色門戶中設置權限(似乎是新門戶中的權限錯誤沒有出現在清單中)並試圖使申請單一租戶。什麼都沒有

回答

2

用於編寫Azure AD多租戶應用程序的最流行指導和示例建議使用通用端點而不是租戶特定端點。

Common endpoint: https://login.microsoftonline.com/common/oauth2/authorize 
Tenant specific endpoint: https://login.microsoftonline.com/company.com/oauth2/authorize 

共同端點允許用戶從任何租戶進行登錄。它做的租戶發現,這意味着,基於用戶的電子郵件,它會自動將用戶重定向到租戶的端點實現這一點。但是,這也意味着[email protected]將始終作爲company.com的員工登錄,並且不會作爲客戶通過B2B協作功能添加爲客人的其他公司的訪客 - 簡而言之,公共端點不支持來賓。

另一方面,租戶特定端點只允許該租戶的用戶登錄。雖然不進行租戶發現,但仍允許來自其他租戶的用戶嘗試登錄,但會檢查看看他們是否已作爲嘉賓添加到租戶。如果他們沒有,登錄將失敗 - 簡而言之,訪客用戶(用戶通過B2B協作功能添加)只能在特定於承租人的終端中工作。

如果您希望多租戶應用程序支持guest虛擬機,則需要自己進行租戶發現,並利用租戶特定的端點而不是通用端點。

這意味着你的應用程序需要知道哪些Azure的AD租戶關聯到每個工作區/團隊/實例/不管隔離級,在最全,例如:

contoso.myapp.com or www.myapp.com/contoso will sign in users via login.microsoftonline.com/contoso.com 

fabrikam.myapp.com or www.myapp.com/fabrikamwill sign in users via login.microsoftonline.com/fabrikam.com 
+0

有趣的是,這聽起來像是正確的答案,但我會等到標記答案,直到我從Azure支持獲得答案(已向他們提出問題)。我們確實使用通用端點,並且我們需要支持來賓用戶和使用他們自己的租戶的用戶。我會嘗試改變租戶發現,看看是否有效。我看到你在微軟工作。你知道公共終端是否將在未來支持客人? –

+0

再次感謝您的回答。我在下面添加了另一個答案,以及我從Azure支持獲得的最終響應,並簡要描述了我使用的解決方法 –

+0

我試圖採取這種方法,並且遇到了可能是Azure系統上的一個錯誤(請參閱http://stackoverflow.com /問題/ 43377553/openidconnect誤差租戶的標識符-MAY-不待一個空性全局唯一標識符/ 43377804)。但也許我只是做錯了什麼。 @薩卡你有沒有一個樣本來描述你過去如何做到這一點? –

0

從下面可以看出,Azure支持給了我相同的結論:公共端點不適用於來賓用戶。我最終的解決方法是將所有用戶作爲訪客用戶添加到我的租戶中,並使用特定於租戶的終端。我還注意到,訪客用戶獲得與他們的家庭用戶不同的objectId,這意味着當外部租戶用於確定組成員身份等時,我們需要存儲訪客與家庭用戶之間的關係。

下面是我得到的最終答覆從Azurte支持:

症狀

您發送B2B邀請了幾個客戶,使他們能夠使用已經在Azure的AD目錄nameOfTenant.onmicrosoft.com創建了多租戶應用「NameOfApplication」

駐留在非託管目錄上的受邀電子郵件已驗證用戶無法使用「拒絕訪問」錯誤訪問該應用程序。潛在的錯誤消息:

AADSTS65005:應用程序NameOfApplication目前不支持您的公司.no。您的公司目前處於非託管狀態,需要管理員通過.no的DNS驗證聲明公司​​所有權,然後才能設置應用程序NameOfApplication。

原因

這裏的問題在於所使用的端點與用戶認證進行。

在b2b邀請和公共租戶端點的情況下,暗示將使用租戶發現。這也意味着用戶將在其原始租戶中進行身份驗證,而不使用在應用程序實際存在的租戶中創建的訪客帳戶。

結論:在這個時間點,公共端點不支持訪客帳戶。

如果使用租戶特定端點,則將使用由b2b進程生成的來賓帳戶,但只有來自該特定租戶的用戶才能通過身份驗證。 這意味着來自其他租戶的用戶仍可能嘗試進行身份驗證,但是如果尚未將其添加爲原始租戶的訪客,則身份驗證將失敗。

結論:來賓用戶(從B2B)將只在租戶特定端點工作

分辨率

不幸的是沒有其他解決這個問題,除非在開發應用程序進行自定義的方法租戶發現操作,並從那裏能夠使用每個租戶特定的端點。

從你引用自己的話說:

「......我用的是租戶特定端點和所有用戶轉換到該租戶的客人 。我們得到 目錄讀取訪問權限的受管理外部租戶中的用戶可以在他們成爲 我們監控的羣組成員(在他們的租戶中)時作爲嘉賓添加。這樣,我們仍然 允許這些公司控制從他們的系統的 訪問我們的系統。所有其他用戶將被添加爲手動客人(社會 賬戶,非託管的外部租戶,並從管理外部 租客,我們不會有讀目錄訪問)......」

相關問題