1

我正在構建一個POC多租戶應用程序,它使用asp.net核心上的IdentityServer 4作爲我的客戶端應用程序和使用openIdConnect的Azure Active Directory之間的中間人。當用戶從尚未授權使用該應用程序的新AAD租戶登錄時,是否有辦法觸發admin_consent流程?如何使用IdentityServer 4爲多租戶應用程序觸發admin_consent流程?

This Azure sample展示瞭如何使用它從頭開始構建AAD開放的客戶端站點上的控制器執行手動同意,但我拍攝的,其中來自一個新的目錄用戶點擊我的網站的經驗,被踢到AAD公共端點,登錄,並提供一個用戶界面來授權他們的目錄中的應用程序。

現在我鍵入,我在想的問題是,AAD未必 有一種方法來告訴跳過 錯誤屏幕「不與目錄註冊的」,這樣的AAD管理員從新租戶需要 無論如何都要提前執行admin_consent工作流程。

我仍然有興趣知道,如果IdentityServer可以踢掉這個過程(即 - 可在openIdConnect烏里進行操作),因爲我想運行的所有工作流程的身份通過IdentityServer,包括我的管理員同意的工作流程。

+0

我已經想到了這一點,並認識到,從新租戶登錄的用戶的admin_consent工作流意味着任何有AAD的人都可以在我的應用程序註冊到他們的目錄中,如果他們不是真正的合作伙伴,他們(我可以讀你的數據)和我(這裏,有一個看看我的應用程序,陌生人)。無論如何,我仍對核心問題感興趣 - 如何修改ID4的身份驗證流程以包含admin_consent標記 – Josh

回答

2

對於多租戶應用程序,應用程序的初始註冊位於開發人員使用的Azure AD租戶中。當來自不同租戶的用戶首次登錄到應用程序時,Azure AD會要求他們同意應用程序所請求的權限。

此同意體驗受應用程序請求的權限的影響。 Azure AD支持兩種權限,僅限應用程序和委託。 僅限應用程序權限總是需要租戶管理員的同意。如果您的應用程序請求僅適用於應用程序的權限,並且普通用戶嘗試登錄該應用程序,則您的應用程序將收到一條錯誤消息,指出用戶無法同意,如:此應用程序需要向其他應用程序申請權限。應用程序權限的同意只能由管理員執行。

如果您的應用程序使用需要管理員同意的權限,則需要在應用程序中設置一個手勢,例如管理員可以啓動操作的按鈕或鏈接。應用程序發送該動作請求是一個通常的OAuth2/ID連接授權請求,但也包括提示= admin_consent查詢字符串參數.eg:

https://login.microsoftonline.com/common/oauth2/authorize?client_id= & RESPONSE_TYPE =代碼& REDIRECT_URI = &範圍= OpenID的&提示= admin_consent

有了這個查詢字符串,需要管理員同意,如果你使用普通用戶(非管理員),你會得到這樣的錯誤:此操作只能是由管理員執行您可以檢查是否根據您的要求添加查詢字符串。在您的方案中,您可以單擊here獲取有關如何使用Azure AD外部登錄配置Identity Server4的代碼示例。如果要強制管理員同意的流量,你可以配置OpenIdConnectOptions當處理OnRedirectToIdentityProvider事件,並通過調用ProtocolMessage.SetParameter方法所提供的RedirectContext添加提示查詢字符串參數:

 app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
     { 
      AuthenticationScheme = schemeName, 
      DisplayName = "AzureAD", 
      SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme, 
      ClientId = clientId, 
      Authority = $"https://login.microsoftonline.com/{tenantId}", 
      ResponseType = OpenIdConnectResponseType.IdToken, 
      StateDataFormat = dataFormat, 
      Events = new OpenIdConnectEvents 
      { 
       OnRedirectToIdentityProvider = context => 
       { 
        context.ProtocolMessage.SetParameter("prompt", "admin_consent"); 

        return Task.FromResult(0); 
       } 
      } 


     }); 
+0

好奇,在「OpenID Connect規範」中的「admin_consent」值不是「3.1.2.1。openid- connect-core-1_0認證請求「。如何知道可用的可用值? – jwilleke

+0

這取決於身份提供者。 Azure AD支持OAuth管理員同意多租戶Azure AD應用程序。請檢查[這裏](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devhowto-multi-tenant-overview#understanding-user-and-admin-consent) –

相關問題