2016-09-23 117 views
1

我試圖想出一個相當不尋常的場景的身份驗證方案。多對多身份驗證模式

我已經有多個Azure的活動目錄(可能是數十個),以及多個Web API服務。 客戶可以註冊/登錄到任一AD,然後能夠使用任一服務驗證請求。

直截了當的解決方案將需要我與所有的廣告信息來配置我的所有服務。 這種多對多的關係就是我想要避免的。

我想過建設一個會發出一個標準化的令牌集中令牌交換服務器的解決方案,但我不知道這種方法的安全程度,我寧願使用「開箱即用」的解決方案,而不是實施我自己的。

你將如何去解決這個問題?

+0

這聽起來像一個多租戶應用程序?您是否看過使用Azure AD構建多租戶應用程序? – Thomas

+0

我看着它。問題是用戶不能選擇登錄哪個AD。它應該由重定向用戶登錄的服務決定。 –

+0

用戶不會選擇。您輸入您的電子郵件並根據您的電子郵件將其重定向到您組織的登錄頁面。 – Thomas

回答

0

multi-tenancy support of Azure AD旨在解決您的方案。

首先您將服務作爲Azure AD中的多租戶應用程序發佈。然後,租戶目錄管理員通過通過同意流程來訂閱該應用程序。

您的服務需要將TokenValidationParametersValidateIssuer屬性設置爲false以禁用檢查令牌的頒發者。

現在,用戶可以使用登錄任何目錄,前提是他們同意該應用程序。要將此限制爲僅需要的目錄,您可以將IssuerValidator代理添加到TokenValidationParameters

IssuerValidator = (issuer, token, params) => 
{ 
    if (_db.FindIssuer(issuer) != null) 
     return issuer; 
    else 
     throw new SecurityTokenInvalidIssuerException("Not a valid issuer"); 
}, 
+0

原則上,您是對的,但這不完全是我的場景。 有一些額外的要求,可能會相互碰撞。 1.我希望用戶能夠在多個承租人中使用同一個電子郵件地址(可能不是問題,但是 - ) 2.我不希望他們能夠選擇使用哪個AD登錄,我想將它們重定向到我爲他們選擇的那個。 3.我不想在註冊時顯示同意頁面。我想創造用戶直接與提供商簽約的感覺。 –

+0

不確定你爲什麼在意用戶登錄的目錄。除了'tenantid'聲明外,發佈的令牌將是相同的。用戶不會選擇他們登錄的目錄,只需輸入他們的憑據,Azure AD將根據他們的域選擇正確的目錄。如果租戶管理員已獲得全球同意,則不會爲每個用戶顯示同意頁面。 – MvdD

+0

因此,您希望創建自定義登錄頁面,然後調用Azure AD Graph API來獲取身份驗證令牌?可能是你應該編輯你的問題來解釋一些關於你的需求和爲什麼默認多租戶不符合你的要求。但是您所描述的是多租戶應用程序 – Thomas