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

註冊App的頁面以下圖所示:ide

1,Supported Account 類型工具

共有四種類型的Suppored Account:ui

  • 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 URIthis

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

3,App Instance3d

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

能夠向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

相關文章
相關標籤/搜索