探索 Microsoft 驗證程式庫

已完成

Microsoft 驗證程式庫 (MSAL) 可讓開發人員從 Microsoft 身分識別平台取得安全性權杖,以驗證使用者及存取受保護的 Web API。 其可以用來提供對 Microsoft Graph、其他 Microsoft API、第三方 Web API 或您自己的 Web API 的安全存取。MSAL 支援許多不同的應用程式架構和平台,包括 .NET、JavaScript、Java、Python、Android 和 iOS。

MSAL 可讓您透過多種平台通用的 API,以不同方式取得權杖。 使用 MSAL 可提供下列優點:

  • 不需要直接對應用程式中的通訊協定使用 OAuth 程式庫或程式碼。
  • 代表使用者或代表應用程式 (適用於平台時) 取得權杖。
  • 維護權杖快取,並在權杖即將到期時為您重新整理權杖。 您不需要自行處理權杖到期。
  • 協助您指定希望應用程式登入的群體。
  • 協助您從設定檔設定應用程式。
  • 公開可操作的例外狀況、記錄和遙測,以協助您針對應用程式進行疑難排解。

應用程式類型和案例

在 MSAL 中,您可以取得許多應用程式類型的權杖:Web 應用程式、Web API、單頁應用程式 (JavaScript)、行動和原生應用程式,以及精靈和伺服器端應用程式。 MSAL 目前支援下表所列的平台和架構。

程式庫 支援的平台和架構
適用於 Android 的 MSAL Android
MSAL Angular 使用 Angular 和 Angular.js 架構的單一頁面應用程式
適用於 iOS 和 macOS 的 MSAL iOS 和 macOS
MSAL Go (預覽) Windows、macOS、Linux
MSAL Java Windows、macOS、Linux
MSAL.js JavaScript/TypeScript 架構,例如 Vue.js、Ember.js 或 Durandal.js
MSAL.NET .NET Framework、.NET、.NET MAUI、WINUI、Xamarin Android、Xamarin iOS、通用 Windows 平台
MSAL 節點 搭配 Express 的 Web 應用程式、搭配 Electron 的傳統型應用程式、跨平臺主控台應用程式
MSAL Python Windows、macOS、Linux
MSAL React 使用 React 和 React 型程式庫的單一頁面應用程式 (Next.js,Gatsby.js)

驗證流程

下表顯示 Microsoft 驗證程式庫 (MSAL) 提供的一些不同驗證流程。 這些流程可用於各種應用程式案例。

驗證流程 啟用 支援的應用程式類型
授權碼 代表使用者的 Web API 使用者登入和存取。 桌面、行動、單頁應用程式 (SPA) (需要 PKCE)、Web
用戶端認證 使用應用程式本身的身分識別來存取 Web API。 通常用於伺服器對伺服器通訊以及不需要使用者互動的自動化指令碼。 精靈
裝置代碼 輸入受限裝置 (例如智慧型電視和 IoT 裝置) 上代表使用者的 Web API 使用者登入和存取。 也供命令列介面 (CLI) 應用程式使用。 傳統型、行動
隱含授與 代表使用者的 Web API 使用者登入和存取。 不再建議使用隱含授與流程 - 請改為搭配使用授權碼與 PKCE。 單頁應用程式 (SPA)、Web
代理者 (OBO) 代表使用者從「上游」Web API 存取「下游」Web API。 使用者的身分識別和委派的權限會從上游 API 傳遞至下游 API。 Web API
使用者名稱/密碼 (ROPC) 可讓應用程式直接處理其密碼來登入使用者。 不建議使用 ROPC 流程。 傳統型、行動
整合式 Windows 驗證 (IWA) 允許已加入網域或 Microsoft Entra 電腦上的應用程式以無訊息方式取得權杖 (使用者不需要進行任何 UI 互動)。 傳統型、行動

公用用戶端和機密用戶端應用程式

Microsoft 驗證程式庫 (MSAL) 會定義兩類用戶端:公用用戶端和機密用戶端。 用戶端是軟體實體,其具有識別提供者指派的唯一標識碼。 用戶端類型會根據其使用授權伺服器來安全地進行驗證的能力,以及保存敏感性身分識別證明資訊的能力而不同,如此一來,使用者就無法在其存取範圍內存取或知道該資訊。

檢查指定用戶端的公用或機密性質時,我們會評估該用戶端向授權伺服器證明其身分識別的能力。 這很重要,因為授權伺服器必須能夠信任用戶端的身分識別,才能發出存取令牌。

  • 公用用戶端應用程式 在傳統型、無瀏覽器 API、行動裝置或用戶端瀏覽器應用程式等裝置上執行。 不能信任這些應用程式可以安全地保存應用程式祕密,因此只會代表使用者存取 Web API。 只要在任何位置傳輸所給定應用程式的來源或已編譯的位元組程式碼,不受信任的一方就可以對其進行讀取、反組譯或檢查。 由於它們同樣僅支援公用用戶端流程,公用用戶端無法保存設定時間祕密,因此無法有用戶端密碼。

  • 機密用戶端應用程式是在伺服器上執行的應用程式,例如 Web 應用程式、Web API 應用程式,或是服務/精靈應用程式。 用戶或攻擊者會將其視為難以存取,因此可以充分保存設定時間秘密,以判斷其身分識別的證明。 用戶端識別碼是透過網頁瀏覽器公開,但祕密只會在後端通道中傳遞,而且絕對不會直接公開。