Azure App object和Service Principal

悅光陰發表於2021-01-19

為了把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

相關文章