警告
此內容適用於較舊的 Azure AD v1.0 端點。 針對新專案使用 Microsoft身分識別平臺。
驗證 是要求合作方提供合法憑證的動作,為創建用於身份識別和訪問控制的安全性主體提供了基礎。 簡單來說,就是證明你是你自稱的那個人的過程。 驗證 (Authentication) 有時會被簡稱為 AuthN。
授權 是授與已驗證的安全性主體許可權來執行某些動作的行為。 它會指定您可以存取哪些數據,以及您可以使用它執行哪些動作。 授權 (Authorization) 有時會被簡稱為 AuthZ。
適用於開發人員的 Azure Active Directory (v1.0) (Azure AD) 透過提供身分識別即服務來簡化應用程式開發人員的驗證,並支援 OAuth 2.0 和 OpenID Connect 等業界標準通訊協定,以及適用於不同平臺的開放原始碼連結庫,以協助您快速開始撰寫程式代碼。
Azure AD 程式設計模型中有兩個主要使用案例:
- 在 OAuth 2.0 授權授與流程期間 - 當資源擁有者將授權授與用戶端應用程式時,可讓用戶端存取資源擁有者的資源。
- 在客戶端進行資源存取時,如資源伺服器所實作,使用存取令牌中存在的宣告值,根據它們做出存取控制決策。
Azure AD 中的驗證基本概念
請考慮需要身分識別的最基本案例:網頁瀏覽器中的用戶必須向 Web 應用程式進行驗證。 下圖顯示此案例:
以下是您需要了解圖表中顯示的各種元件:
- Azure AD 是識別提供者。 身分識別提供者負責驗證存在於組織目錄中的使用者和應用程式的身分識別,並在成功驗證這些使用者和應用程式時發出安全性令牌。
- 想要將驗證外包給 Azure AD 的應用程式必須在 Azure Active Directory (Azure AD) 中註冊。 Azure AD 會註冊並唯一識別目錄中的應用程式。
- 開發人員可以使用開放原始碼 Azure AD 驗證連結庫,藉由為您處理通訊協定詳細數據,輕鬆進行驗證。 如需詳細資訊,請參閱Microsoft身分識別平臺 v2.0 驗證連結庫 和 v1.0 驗證連結庫。
- 驗證用戶之後,應用程式必須驗證使用者的安全性令牌,以確保驗證成功。 您可以在各種語言和架構中找到快速入門、教學課程和程式代碼範例,以示範應用程式必須執行的動作。
- 若要快速建置應用程式並新增功能,例如取得令牌、重新整理令牌、登入使用者、顯示某些用戶資訊等等,請參閱檔的 快速入門 一節。
- 若要取得頂尖授權開發人員工作相關的深入案例導向程序,例如取得存取權杖並在呼叫 Microsoft Graph API 和其他 API 時使用,使用 OpenID Connect 透過傳統網頁瀏覽器型應用程式實施 Microsoft 登入等資訊,請參閱文件中的 教學課程 一節。
- 若要下載程式代碼範例,請移至 GitHub。
- 驗證程式的要求和回應流程取決於您所使用的驗證通訊協定,例如 OAuth 2.0、OpenID Connect、WS-Federation 或 SAML 2.0。 如需通訊協議的詳細資訊,請參閱檔的概 念 > 驗證通訊協定 一節。
在上述範例案例中,您可以根據下列兩個角色分類應用程式:
- 需要安全地存取資源的應用程式
- 扮演資源本身角色的應用程式
每個流程如何發出令牌和程式碼
視用戶端建置方式而定,它可以使用 Azure AD 所支援的一或多個驗證流程。 這些流程可以產生各種令牌(id_tokens、重新整理令牌、存取令牌)以及授權碼,並要求不同的令牌才能運作。 此圖表提供概觀:
| 流 | 需要 | id_token(驗證令牌) | 存取憑證 | 刷新權杖 | 授權碼 |
|---|---|---|---|---|---|
| 授權碼流程 | x | x | x | x | |
| 隱含流程 | x | x | |||
| 混合式 OIDC 流程 | x | x | |||
| 更新令牌兌換 | 刷新權杖 | x | x | x | |
| 代替流程 | 存取憑證 | x | x | x | |
| 用戶端認證 | x (只限應用程式) |
透過隱含模式發出的令牌有長度限制,因為會透過URL(其中 response_mode 為 query 或 fragment) 傳回瀏覽器。 某些瀏覽器對可以放置在其中的 URL 大小有限制,當 URL 過長時就會出現錯誤。 因此,這些令牌沒有 groups 或 wids 宣告。
現在您已概略瞭解基本概念,請繼續閱讀以瞭解身分識別應用程式模型和 API、布建在 Azure AD 中的運作方式,以及連結至 Azure AD 所支援常見案例的詳細資訊。
應用程式模型
Azure AD 代表遵循特定模型的應用程式,其設計目的是要履行兩個主要功能:
根據支持的驗證通訊協議來識別應用程式 - 這牽涉到列舉驗證時所需的所有標識碼、URL、秘密和相關信息。 在這裡,Azure AD:
- 保留運行時間支持驗證所需的所有資料。
- 保留所有數據,以決定應用程式可能需要存取哪些資源,以及指定的要求是否應滿足,以及哪些情況下。
- 提供基礎結構,以便在應用程式開發人員的租戶和任何其他 Azure AD 租戶內實作應用程式供應。
在令牌請求期間管理使用者同意,並促進跨租用戶動態布建應用程式 - 這是 Azure AD 的職責:
- 可讓使用者和系統管理員動態授與或拒絕應用程式代表他們存取資源的同意。
- 可讓系統管理員最終決定允許執行哪些應用程式,以及哪些使用者可以使用特定應用程式,以及存取目錄資源的方式。
在 Azure AD 中, 應用程式物件會將應用程式 描述為抽象實體。 開發人員會使用應用程式。 在部署期間,Azure AD 會使用指定的應用程式對象作為藍圖來建立 服務主體,此主體代表目錄或租用戶內應用程式的具體實例。 這是服務主體,可定義應用程式在特定目標目錄中實際執行的動作、誰可以使用、其可存取哪些資源等等。 Azure AD 會透過 同意從應用程式物件建立服務主體。
下圖顯示由同意驅動的簡化 Azure AD 布建流程。 在其中,有兩個租使用者存在 (A 和 B),其中租使用者 A 擁有應用程式,而租使用者 B 會透過服務主體具現化應用程式。
在此設置流程中:
- 來自租使用者 B 的使用者會嘗試使用應用程式登入,授權端點會要求應用程式的令牌。
- 取得並驗證使用者認證以進行驗證
- 系統會提示使用者同意應用程式取得租使用者 B 的存取權
- Azure AD 使用租使用者 A 中的應用程式對象作為在租使用者 B 中建立服務主體的藍圖
- 使用者收到要求的令牌
您可以針對其他租戶重複此過程多次(C、D 等等)。 租戶 A 保留應用程式物件的藍圖。 應用程式獲授與同意之所有其他租使用者的使用者和系統管理員,可透過每個租使用者中的對應服務主體物件,保留對應用程式允許執行哪些動作的控制。 如需詳細資訊,請參閱 Microsoft身分識別平臺中的應用程式和服務主體物件。
Azure AD 安全性令牌中的宣稱
Azure AD 所簽發的安全性令牌(存取和識別碼令牌)包含宣告,或已驗證之主體的資訊聲明。 應用程式可以使用聲明來執行各種工作,包括:
- 驗證令牌
- 識別主體的目錄租戶
- 顯示使用者資訊
- 確認主體的授權
任何指定安全性令牌中存在的宣告取決於令牌類型、用來驗證使用者的認證類型,以及應用程式組態。
下表提供 Azure AD 所發出之每種宣告類型的簡短描述。 如需詳細資訊,請參閱 Azure AD 所簽發的 存取令牌 和 標識元令牌 。
| 索賠 | 說明 |
|---|---|
| 應用程式識別碼 | 識別使用令牌的應用程式。 |
| 觀眾 | 識別令牌所要用於的收件者資源。 |
| 應用程式驗證內容類別參考 | 指出客戶端的驗證方式(公用用戶端與機密用戶端)。 |
| 驗證立即 | 記錄驗證發生的日期和時間。 |
| 驗證方法 | 指出令牌主體的驗證方式(密碼、憑證等)。 |
| 名字 | 提供 Azure AD 中所設定的使用者指定名稱。 |
| 群組 | 包含用戶所屬 Azure AD 群組的物件識別碼。 |
| 識別提供者 | 記錄驗證權杖主體的身分識別提供者。 |
| 發行於 | 記錄令牌發行的時間,通常用於令牌的新鮮度。 |
| 發行人 | 識別發出令牌的 STS 以及 Azure AD 租使用者。 |
| 姓氏 | 提供 Azure AD 中所設定的使用者姓氏。 |
| 名稱 | 提供一個人類可讀的值以識別憑證的對象。 |
| 物件識別碼 | 包含 Azure AD 中主體不可變的唯一標識碼。 |
| 角色 | 包含使用者已授與的 Azure AD 的應用程式角色的易識別名稱。 |
| 影響範圍 | 表示授與給用戶端應用程式的許可權。 |
| 主旨 | 指示標示令牌指認資訊的主要主體。 |
| 租戶識別碼 | 包含發行該令牌的目錄租戶的不可變且唯一的識別碼。 |
| 通行令牌有效期間 | 定義令牌有效的時間間隔。 |
| 使用者主體名稱 | 包含主體的用戶主體名稱。 |
| 版本 | 包含令牌的版本號碼。 |