Microsoft 身分識別平台 應用程式類型和驗證流程

Microsoft 身分識別平台支援不同類型新式應用程式架構的驗證。 所有架構都是以業界標準通訊協定 OAuth 2.0 和 OpenID 連線 為基礎。 藉由使用 Microsoft 身分識別平台 的驗證連結庫,應用程式會驗證身分識別並取得令牌,以存取受保護的 API。

本文說明驗證流程及其所使用的應用程式案例。

應用程式類別

安全性令牌 可以從數種類型的應用程式取得,包括:

  • Web 應用程式
  • 行動應用程式
  • 傳統型應用程式
  • Web API

令牌也可以由在沒有瀏覽器或正在物聯網 (IoT) 上執行的裝置上執行的應用程式取得。

下列各節說明應用程式的類別。

受保護的資源與用戶端應用程式

驗證案例牽涉到兩個活動:

使用使用者或沒有使用者

大部分的驗證案例會代表登入的使用者取得令牌。

使用者案例

不過,也有精靈應用程式。 在這些案例中,應用程式會代表自己取得令牌,而沒有任何使用者。

精靈應用程式的案例

單頁、公用用戶端和機密用戶端應用程式

安全性權杖可透過多種類型的應用程式取得。 這些應用程式通常分成下列三種類別。 每種類別可搭配不同的程式庫和物件使用。

  • 單頁應用程式:也稱為 SPA,這些 Web 應用程式中的權杖是從在瀏覽器中執行的 JavaScript 或 TypeScript 應用程式取得。 許多新式應用程式在前端都有單頁應用程式,主要以 JavaScript 撰寫。 應用程式通常會使用 Angular、React 或 Vue 等架構。 MSAL.js 是唯一支援單頁應用程式的 Microsoft 驗證程式庫。

  • 公用用戶端應用程式:此類別中的應用程式,例如下列類型,一律登入使用者:

    • 代表登入使用者呼叫 Web API 的桌面應用程式
    • 行動應用程式
    • 在沒有瀏覽器的裝置上執行的應用程式,例如在IoT上執行的應用程式
  • 機密用戶端應用程式:此類別中的應用程式包括:

    • 呼叫 Web API 的 Web 應用程式
    • 呼叫 Web API 的 Web API
    • 精靈應用程式,即使實作為主控台服務,例如Linux精靈或Windows服務

登入對象

可用的驗證流程會根據登入物件而有所不同。 某些流程僅適用於公司或學校帳戶。 其他則適用於公司或學校帳戶,以及個人 Microsoft 帳戶。

如需詳細資訊,請參閱 支援的帳戶類型

應用程式類型

Microsoft 身分識別平台 支援這些應用程式架構的驗證:

  • 單頁應用程式
  • Web 應用程式
  • Web API
  • 行動應用程式
  • 原生應用程式
  • 精靈應用程式
  • 伺服器端 應用程式

應用程式會使用不同的驗證流程來登入使用者,並取得令牌來呼叫受保護的 API。

單頁應用程式

許多新式 Web 應用程式會建置為用戶端單頁應用程式。 這些應用程式會使用 JavaScript 或 Angular、Vue 和 React 等架構。 這些應用程式會在網頁瀏覽器中執行。

單頁應用程式在驗證特性方面與傳統伺服器端 Web 應用程式不同。 藉由使用 Microsoft 身分識別平台,單頁應用程式可以登入使用者,並取得令牌來存取後端服務或 Web API。 Microsoft 身分識別平台 為 JavaScript 應用程式提供兩種授與類型:

MSAL.js (2.x) MSAL.js (1.x)
單頁應用程式驗證 單頁應用程式隱含

登入使用者的 Web 應用程式

登入使用者的 Web 應用程式

若要協助保護登入使用者的 Web 應用程式:

  • 如果您在 .NET 中開發,請使用 ASP.NET 或 ASP.NET Core 搭配 ASP.NET OpenID 連線 中間件。 保護資源牽涉到驗證安全性令牌,此令牌是由適用於 .NETIdentityModel 延伸模組所完成,而不是 MSAL 連結庫。

  • 如果您在 Node.js 中開發,請使用 MSAL 節點

如需詳細資訊,請參閱 登入使用者的 Web 應用程式。

登入使用者的 Web 應用程式,並代表使用者呼叫 Web API

呼叫 Web API 的 Web 應用程式

若要代表使用者從 Web 應用程式呼叫 Web API,請使用授權碼流程,並將取得的令牌儲存在令牌快取中。 如有需要,MSAL 會重新整理令牌,而控制器會以無訊息方式從快取取得令牌。

如需詳細資訊,請參閱 呼叫 Web API 的 Web 應用程式。

代表登入使用者呼叫 Web API 的桌面應用程式

若要讓傳統型應用程式呼叫登入使用者的 Web API,請使用 MSAL 的互動式令牌取得方法。 透過這些互動式方法,您可以控制登入UI體驗。 MSAL 會使用網頁瀏覽器來進行此互動。

呼叫 Web API 的桌面應用程式

已加入 Windows 網域或 Microsoft Entra 識別碼之電腦上的 Windows 裝載應用程式可能會有另一種可能性。 這些應用程式可以使用整合式 Windows 驗證 以無訊息方式取得令牌

在沒有瀏覽器的裝置上執行的應用程式仍然可以代表使用者呼叫 API。 若要進行驗證,用戶必須在具有網頁瀏覽器的另一個裝置上登入。 此案例會要求您使用 裝置程序代碼流程

裝置代碼流程

雖然我們不建議您使用它, 但公用用戶端應用程式中可以使用使用者名稱/密碼流程 。 在某些案例中,仍然需要此流程,例如 DevOps。

使用使用者名稱/密碼流程會限制您的應用程式。 例如,應用程式無法登入需要在 Microsoft Entra ID 中使用多重要素驗證或條件式存取工具的使用者。 您的應用程式也不會受益於單一登錄。 使用使用者名稱/密碼流程進行驗證會違反新式驗證的原則,且僅基於舊版原因提供。

在傳統型應用程式中,如果您想要保存令牌快取,您可以自定義 令牌快取串行化。 藉由實作雙重令牌快取串行化,您可以使用回溯相容和向前相容的令牌快取。

如需詳細資訊,請參閱 呼叫 Web API 的桌面應用程式。

代表互動式使用者呼叫 Web API 的行動應用程式

類似於傳統型應用程式,行動應用程式會呼叫 MSAL 的互動式令牌取得方法,以取得呼叫 Web API 的令牌。

呼叫 Web API 的行動應用程式

MSAL iOS 和 MSAL Android 預設會使用系統網頁瀏覽器。 不過,您可以指示他們改用內嵌 Web 檢視。 行動平臺有一個特定之處:通用 Windows 平台(UWP)、iOS 或Android。

某些案例,例如與裝置標識碼或裝置註冊相關的條件式存取,需要在裝置上安裝訊息代理程式。 訊息代理程式範例包括Android上的 Microsoft 公司入口網站,以及 Android 和 iOS 上的 Microsoft Authenticator。 MSAL 現在可以與訊息代理程序互動。 如需訊息代理程式的詳細資訊,請參閱 在 Android 和 iOS 上運用訊息代理程式。

如需詳細資訊,請參閱 呼叫Web API的行動應用程式。

注意

使用 MSAL.iOS、MSAL 的行動應用程式。Xamarin 上的 Android 或 MSAL.NET 可以套用應用程式保護原則。 例如,原則可能會防止使用者複製受保護的文字。 行動應用程式是由 Intune 管理,且由 Intune 辨識為受控應用程式。 如需詳細資訊,請參閱 Microsoft Intune App SDK 概觀

Intune App SDK 與 MSAL 連結庫不同,並自行與 Microsoft Entra ID 互動。

受保護的 Web API

您可以使用 Microsoft 身分識別平台 端點來保護 Web 服務,例如應用程式的 RESTful API。 受保護的 Web API 會透過存取令牌呼叫。 令牌可協助保護 API 的數據,並驗證傳入要求。 Web API 的呼叫端會在 HTTP 要求的授權標頭中附加存取令牌。

如果您想要保護 ASP.NET 或 ASP.NET Core Web API,請驗證存取令牌。 針對此驗證,您可以使用 ASP.NET JWT 中間件。 驗證是由 .NET 連結庫的 IdentityModel 延伸模組完成,而不是由 MSAL.NET 來完成。

如需詳細資訊,請參閱 受保護的Web API

代表使用者呼叫另一個 Web API 的 Web API

若要讓受保護的 Web API 代表使用者呼叫另一個 Web API,您的應用程式必須取得下游 Web API 的令牌。 這類呼叫有時稱為 服務對服務 呼叫。 呼叫其他 Web API 的 Web API 必須提供自定義快取串行化。

呼叫另一個 Web API 的 Web API

如需詳細資訊,請參閱 呼叫Web API的Web API

在精靈名稱中呼叫 Web API 的精靈應用程式

具有長時間執行進程或在沒有使用者互動的情況下運作的應用程式,也需要一種方式來存取安全的Web API。 這類應用程式可以使用應用程式的身分識別來驗證和取得令牌。 應用程式會使用用戶端密碼或憑證來證明其身分識別。

您可以使用 MSAL 中的用戶端認證擷取方法來撰寫這類精靈應用程式,以取得呼叫應用程式的令牌。 這些方法需要您在 Microsoft Entra ID 中新增至應用程式註冊的客戶端密碼。 然後,應用程式會與所謂的精靈共用秘密。 這類秘密的範例包括應用程式密碼、憑證判斷提示和客戶端判斷提示。

其他應用程式和 API 所呼叫的精靈應用程式

如需詳細資訊,請參閱 呼叫 Web API 的精靈應用程式。

案例和支持的驗證流程

您可以使用驗證流程來實作要求令牌的應用程式案例。 應用程式案例與驗證流程之間沒有一對一對應。

涉及取得令牌的案例也會對應至 OAuth 2.0 驗證流程。 如需詳細資訊,請參閱 Microsoft 身分識別平台 上的 OAuth 2.0 和 OpenID 連線 通訊協定。

案例 詳細的案例逐步解說 OAuth 2.0 流程和授與 對象
具有驗證碼的單頁應用程式 單頁應用程式 使用 PKCE 的授權碼 公司或學校帳戶、個人帳戶和 Azure Active Directory B2C (Azure AD B2C)
含隱含的單頁應用程式 單頁應用程式 隱含 公司或學校帳戶、個人帳戶和 Azure Active Directory B2C (Azure AD B2C)
登入使用者的 Web 應用程式 登入使用者的 Web 應用程式 授權碼 公司或學校帳戶、個人帳戶和 Azure AD B2C
呼叫 Web API 的 Web 應用程式 呼叫 Web API 的 Web 應用程式 授權碼 公司或學校帳戶、個人帳戶和 Azure AD B2C
呼叫 Web API 的桌面應用程式 呼叫 Web API 的桌面應用程式 搭配 PKCE 使用 授權碼 進行互動式 公司或學校帳戶、個人帳戶和 Azure AD B2C
整合式 Windows 驗證 公司或學校帳戶
資源擁有者密碼 公司或學校帳戶和 Azure AD B2C
無瀏覽器應用程式 裝置代碼 公司或學校帳戶、個人帳戶,但不是 Azure AD B2C
呼叫 Web API 的行動應用程式 呼叫 Web API 的行動應用程式 搭配 PKCE 使用 授權碼 進行互動式 公司或學校帳戶、個人帳戶和 Azure AD B2C
資源擁有者密碼 公司或學校帳戶和 Azure AD B2C
呼叫 Web API 的精靈應用程式 呼叫 Web API 的精靈應用程式 用戶端認證 沒有使用者且只用於 Microsoft Entra 組織中的僅限應用程式許可權
呼叫 Web API 的 Web API 呼叫 Web API 的 Web API 代理者 公司或學校帳戶和個人帳戶

案例和支援的平台和語言

Microsoft 驗證連結庫支援多個平臺:

  • .NET
  • .NET Framework
  • Java
  • JavaScript
  • macOS
  • 原生 Android
  • 原生 iOS
  • Node.js
  • Python
  • Windows 10/UWP
  • Xamarin.iOS
  • Xamarin.Android

您也可以使用各種語言來建置應用程式。

在下表的 Windows 數據行中,每次提及 .NET 時,也可以使用 .NET Framework。 省略後者以避免數據表雜亂。

案例 Windows Linux Mac: iOS Android
單頁應用程式
單頁應用程式驗證
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js MSAL.js MSAL.js
MSAL.js
單頁應用程式
單頁應用程式隱含
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js
MSAL.js MSAL.js MSAL.js
MSAL.js
登入使用者的 Web 應用程式
登入使用者的 Web 應用程式
ASP.NET Core
ASP.NET Core MSAL 節點
MSAL 節點
ASP.NET Core
ASP.NET Core MSAL 節點
MSAL 節點
ASP.NET Core
ASP.NET Core MSAL 節點
MSAL 節點
呼叫 Web API 的 Web 應用程式

呼叫 Web API 的 Web 應用程式
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
Flask + MSAL Python MSAL 節點
MSAL 節點
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
Flask + MSAL Python MSAL 節點
MSAL 節點
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
Flask + MSAL Python MSAL 節點
MSAL 節點
呼叫 Web API 的桌面應用程式

呼叫 Web API 的桌面應用程式裝置代碼流程
.NETMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 節點
MSAL 節點
.NETMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 節點
MSAL 節點
.NETMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python
MSAL 節點
MSAL 節點
iOS / Objective C 或 swift MSAL.objc
呼叫 Web API 的行動應用程式
呼叫 Web API 的行動應用程式
UWP MSAL.NET Xamarin MSAL.NET iOS / Objective C 或 swift MSAL.objc Android MSAL。Android
精靈應用程式
精靈應用程式
.NETMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 節點
MSAL 節點
.NET MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 節點
MSAL 節點
.NETMSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 節點
MSAL 節點
呼叫 Web API 的 Web API

呼叫 Web API 的 Web API
ASP.NET Core
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 節點
MSAL 節點
.NET
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 節點
MSAL 節點
.NET
ASP.NET Core + MSAL.NET MSAL Java
MSAL Java
MSAL Python
MSAL Python MSAL 節點
MSAL 節點

如需詳細資訊,請參閱 Microsoft 身分識別平台 驗證連結庫

下一步

如需驗證的詳細資訊,請參閱: