Azure App object和Service Principal

爲了把Identity(身份)和Access Management function(訪問管理功能)委派給Azure AD,必須向Azure AD tenant註冊應用程序。使用Azure AD註冊應用程序,實際是爲應用程序創建一個身份配置,以使其能夠與Azure AD集成。 在Azure門戶中註冊應用程序時,可以選擇是單租戶(僅在您的租戶中可訪問)還是多租戶(在其他租戶中可訪問),並且可以選擇設置重定向URI,這是訪問令牌(Access Token)被髮送到的位置 

當在Portal中註冊app時,home tenant會自動創建app instance和service principal。

一,通過UI註冊App

登錄到Azure Portal中,選擇“Azure Active Directory”服務,從Overview選項卡中點擊“App registration”:

註冊App的頁面如下圖所示:

1,Supported Account 類型

共有四種類型的Suppored Account:

  • Accounts in this organizational directory only (Microsoft only - Single tenant):只爲自己tenant中的用戶創建一個app,簡稱爲single-tenant app
  • Accounts in any organizational directory (Any Azure AD directory - Multitenant):任意AD tenant中的用戶都能夠使用該app,簡稱爲multi-tenant app。
  • Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox):支持multi-tenant,並支持個人的微軟賬戶(personal Microsoft account)
  • Personal Microsoft accounts only:只爲個人微軟賬戶(Personal Microsoft account)使用的app

2,Redirect URI

這個配置項是可選的,成功驗證身份後,Azure AD把身份驗證的響應(Response)返回到此URI。

3,App Instance

當完成app的註冊後,一個App對象的全局唯一實例就創建成功了,該實例位於home tenant 或 directory中,並且該app instance擁有一個GUID,稱作App ID 或 Client ID。

可以向Portal中添加Secret或Certificate和Secret Scope,使得App可以工作。

二, Application Object

Azure AD應用程序是由其唯一的應用程序對象定義的,該對象位於應用程序註冊所在的Azure AD租戶(稱爲應用程序的“主”租戶)中。 應用程序對象用作創建一個或多個服務主體(Service Principal)對象的模板或藍圖。 在使用該應用程序的每個租戶中都會創建一個服務主體。與面向對象編程中的class相似,應用程序對象具有一些靜態屬性,這些屬性應用於所有已創建的服務主體(或應用程序實例)。

應用程序對象描述了一個應用程序的三個方面:服務如何發出令牌以訪問應用程序,應用程序可能需要訪問的資源以及應用程序可以採取的操作。

“App registrations” 用於列出和管理home tenant中的app:

三,Service Principal

如果一個實體需要訪問由Azure AD租戶保護的資源,那麼該實體必須由安全主體(security principal)所代表。此要求對用戶(用戶主體)和應用程序(服務主體)均適用。安全主體定義Azure AD租戶中用戶/應用程序的訪問策略和權限,例如登錄期間對用戶/應用程序的身份驗證以及資源訪問期間的授權。

服務主體(service principal)是單個租戶或目錄中全局應用程序對象的本地表示形式(或應用程序實例)。服務主體是從應用程序對象創建的具體實例,並從該應用程序對象繼承某些屬性。在使用該應用程序的每個租戶中創建一個服務主體,並引用全局唯一的應用程序對象。服務主體對象定義了應用程序可以在特定租戶中實際執行的操作,可以訪問該應用程序的人員以及該應用程序可以訪問的資源。

當一個應用程序被授予訪問租戶中資源的權限時(註冊或同意時),同時創建一個服務主體對象。您還可以使用Azure PowerShell,Azure CLI,Microsoft Graph,Azure門戶和其他工具在租戶中創建服務主體對象。如果使用門戶 UI,那麼在註冊應用程序時會自動創建服務主體。門戶中的Enterprise applications用於列出和管理租戶中的服務主體,並可以看到服務主體的權限,用戶同意的權限,用戶已經同意的權限,登錄信息等等。

四,Application 對象和Service Principal之間的關係

應用程序對象是在所有租戶中使用的應用程序的全局表示形式,服務主體是在特定租戶中使用的本地表示形式。應用程序對象用作模板,從該模板派生通用屬性和默認屬性以用於創建相應的服務主體對象。 因此,應用程序對象與軟件應用程序具有1:1的關係,與其對應的服務主體對象具有1:many的關係。 注意,必須在使用該應用程序的每個租戶中創建一個服務主體,使其能夠爲登錄(sign-in)和/或訪問由該租戶保護的資源建立身份。單租戶(single-tenant)的應用程序只有一個服務主體(在其home租戶中),該Service Principal在在應用程序註冊期間被創建。多租戶(multi-tenant)的Web應用程序/ API在每個租戶中都會創建一個服務主體,來自該租戶的每個用戶都使用該服務主體。

注意,對應用程序對象所做的任何更改只會反映到在應用程序的home租戶(註冊該租戶的租戶)中的服務主體對象。 對於多租戶應用程序,對應用程序對象的更改不會反映在任何消費者租戶的服務主體對象中,除非通過“Application Access Panel”把權限刪除,並再次授予訪問權限。 另請注意,默認情況下,本機應用程序已註冊爲多租戶。

 

 

參考文檔:

Microsoft identity platform documentation

Application and service principals

Quickstart: Register an application with the Microsoft identity platform

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章