Microsoft 身分識別平台的應用程式類型

Microsoft 身分識別平台 支援各種新式應用程式架構的驗證,這些架構全都以業界標準通訊協定 OAuth 2.0 或 OpenID 連線 為基礎。 本文說明您可以使用 Microsoft 身分識別平台 建置的應用程式類型,不論您慣用的語言或平台為何。 這項資訊旨在協助您在開始使用應用程式案例中的 程式碼之前,先瞭解高階案例

基本知識

您必須在 Microsoft Entra 系統管理中心 應用程式註冊 註冊使用 Microsoft 身分識別平台 的每個應用程式。 應用程式註冊程式會收集並指派這些值給您的應用程式:

  • 可唯一識別您應用程式的應用程式 (用戶端) 識別碼
  • 您可以用來將回應導向回應用程式的重新導向 URI
  • 其他幾個案例特定值,例如支援的帳戶類型

如需詳細資訊,請了解如何註冊應用程式

註冊應用程式之後,應用程式會藉由將要求傳送至端點來與 Microsoft 身分識別平台 通訊。 我們提供開放原始碼架構和連結庫,以處理這些要求的詳細數據。 您也可以選擇建立這些端點的要求,自行實作驗證邏輯:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize
https://login.microsoftonline.com/common/oauth2/v2.0/token

Microsoft 身分識別平台 支援的應用程式類型為:

  • 單頁應用程式 (SPA)
  • Web 應用程式
  • Web API
  • 行動裝置和原生應用程式
  • 服務、精靈、指令碼

單頁應用程式

許多新式應用程式都有主要以 JavaScript 撰寫的單頁應用程式 (SPA) 前端,通常具有 Angular、React 或 Vue 等架構。 Microsoft 身分識別平台 支援這些應用程式,方法是使用 OpenID 連線 通訊協定進行驗證,以及 OAuth 2.0 所定義的兩種授權授與類型之一。 支援的授與類型是 OAuth 2.0 隱含授與流程 或較新的 OAuth 2.0 授權碼 + PKCE 流程 (請參閱下文)。

流程圖示範 OAuth 2.0 授權碼授與流程(其中省略 PKCE 的詳細數據),其中應用程式會從 Microsoft 身分識別平台 authorize 端點接收程式代碼,並使用跨網站網站要求兌換其存取令牌和重新整理令牌。 若為 SPA,存取令牌的有效期限為 1 小時,而且一旦過期,就必須使用重新整理令牌要求另一個程式代碼。 除了存取令牌,id_token代表用戶端應用程式登入使用者的 ,通常也會透過相同的流程和/或個別的 OpenID 連線 要求來要求 (這裡未顯示)。

顯示單頁應用程式與安全性令牌服務端點之間 OAuth 2.0 授權碼流程的圖表。

若要查看此動作,請參閱 快速入門:在單頁應用程式 (SPA) 中登入使用者,並使用 JavaScript 呼叫 Microsoft Graph API。

授權碼流程與隱含流程

OAuth 2.0 授權碼流程現在是建置 SPA 的建議方式,以確保您在 Safari 和其他隱私權意識瀏覽器中應用程式的相容性。 拿掉 第三方 Cookie更加注意之後,不建議繼續使用隱含流程。

Web 應用程式

對於使用者透過瀏覽器存取的 Web 應用程式(.NET、PHP、Java、Ruby、Python、Node),您可以使用 OpenID 連線 進行使用者登入。 在OpenID連線中,Web 應用程式會收到標識碼令牌。 識別元令牌是一種安全性令牌,可驗證使用者的身分識別,並以宣告形式提供使用者的相關信息:

// Partial raw ID token
abC1dEf2Ghi3jkL4mNo5Pqr6stU7vWx8Yza9...

// Partial content of a decoded ID token
{
    "name": "Casey Jensen",
    "email": "casey.jensen@onmicrosoft.com",
    "oid": "ab12cd34-effe-5678-9012-abcdef012345"
    ...
}

存取令牌參考和id_token參考中提供 Microsoft 身分識別平台 中所用不同類型令牌的進一步詳細數據。

在 Web 伺服器應用程式中,登入驗證流程會採用下列高階步驟:

顯示 Web 應用程式驗證流程

您可以使用從 Microsoft 身分識別平台 收到的公開簽署金鑰來驗證標識元令牌,以確保使用者的身分識別。 會話 Cookie 已設定,可用來識別後續頁面要求的使用者。

在下列多部分 教學課程系列中建置可登入使用者的 ASP.NET Core Web 應用程式,以深入瞭解

除了簡單的登入之外,Web 伺服器應用程式可能需要存取另一個 Web 服務,例如表示狀態傳輸 (REST) API。 在此情況下,Web 伺服器應用程式會使用 OAuth 2.0 授權碼流程,參與合併的 OpenID 連線 和 OAuth 2.0 流程。 如需此案例的詳細資訊,請參閱我們的程式代碼 範例

Web API

您可以使用 Microsoft 身分識別平台 來保護 Web 服務,例如應用程式的 RESTful Web API。 Web API 可以用許多平臺和語言實作。 您也可以在 Azure Functions 中使用 HTTP 觸發程式來實作它們。 Web API 會使用 OAuth 2.0 存取令牌來保護其數據及驗證傳入要求,而不是標識符令牌和會話 Cookie。

Web API 的呼叫端會在 HTTP 要求的授權標頭中附加存取令牌,如下所示:

GET /api/items HTTP/1.1
Host: www.mywebapi.com
Authorization: Bearer abC1dEf2Ghi3jkL4mNo5Pqr6stU7vWx8Yza9...
Accept: application/json
...

Web API 會使用存取令牌來驗證 API 呼叫端的身分識別,並從存取令牌中編碼的宣告擷取呼叫者的相關信息。 存取令牌參考和標識元令牌參考中提供 Microsoft 身分識別平台 中所用不同類型令牌的進一步詳細數據。

Web API 可讓用戶藉由公開許可權,也就是範圍來選擇加入或退出特定功能或數據。 若要讓呼叫應用程式取得範圍的許可權,用戶必須在流程期間同意範圍。 Microsoft 身分識別平台 會要求使用者取得許可權,然後在 Web API 接收的所有存取令牌中記錄許可權。 Web API 會驗證在每次呼叫上收到的存取令牌,並執行授權檢查。

Web API 可以從所有類型的應用程式接收存取令牌,包括 Web 伺服器應用程式、桌面和行動應用程式、單頁應用程式、伺服器端精靈,甚至是其他 Web API。 Web API 的高階流程如下所示:

顯示 Web API 驗證流程

若要瞭解如何使用 OAuth2 存取令牌保護 Web API,請參閱受保護 Web API 教學課程中的 Web API 程式代碼範例。

在許多情況下,Web API 也需要對 Microsoft 身分識別平台 保護的其他下游Web API提出輸出要求。 若要這樣做,Web API 可以利用 代理者 (OBO) 流程,讓 Web API 交換傳入存取令牌,讓其他存取令牌用於輸出要求。 如需詳細資訊,請參閱 Microsoft 身分識別平台 和 OAuth 2.0 代理者流程

行動裝置和原生應用程式

裝置安裝的應用程式,例如行動和傳統型應用程式,通常需要存取後端服務或 Web API,以代表使用者儲存資料並執行函式。 這些應用程式可以使用 OAuth 2.0 授權碼流程,將登入和授權新增至後端服務

在此流程中,當使用者登入時,應用程式會收到來自 Microsoft 身分識別平台 的授權碼。 授權碼代表應用程式代表登入的使用者呼叫後端服務的許可權。 應用程式可以在背景中交換 OAuth 2.0 存取令牌和重新整理令牌的授權碼。 應用程式可以使用存取令牌向 HTTP 要求中的 Web API 進行驗證,並使用重新整理令牌在舊版存取令牌到期時取得新的存取令牌。

顯示原生應用程式驗證流程

注意

如果應用程式使用預設系統 Webview,請檢查 Microsoft Entra 驗證和授權錯誤碼中「確認我的登入」功能和錯誤碼AADSTS50199的相關信息。

伺服器、精靈和腳本

具有長時間執行進程或在沒有與使用者互動的情況下運作的應用程式,也需要一種方式來存取受保護的資源,例如 Web API。 這些應用程式可以使用應用程式的身分識別,而不是使用使用者的委派身分識別,搭配OAuth 2.0 用戶端認證流程來驗證和取得令牌。 您可以使用用戶端密碼或憑證來證明應用程式的身分識別。 如需詳細資訊,請參閱使用 Microsoft 身分識別平台 的 .NET 精靈控制台應用程式。

在此流程中,應用程式會直接與 /token 端點互動以取得存取權:

顯示精靈應用程式驗證流程

若要建置精靈應用程式,請參閱 客戶端認證檔,或嘗試 .NET 範例應用程式

另請參閱

既然您已熟悉 Microsoft 身分識別平台 所支援的應用程式類型,請深入瞭解 OAuth 2.0 和 OpenID 連線,以瞭解不同案例所使用的通訊協定元件。