管理 零信任 的令牌
在 零信任 應用程式開發中,請務必特別定義應用程式的意圖及其資源存取需求。 您的應用程式應該只要求它所需的存取權,才能如預期般運作。 本文可協助您身為開發人員,使用應用程式可從 Microsoft 身分識別平台 接收的標識碼令牌、存取令牌和安全性令牌,將安全性建置至應用程式。
請確定您的應用程式遵守最低許可權的 零信任 原則,並防止使用危害您意圖的方式。 使用 Just-In-Time 和 Just-Enough-Access (JIT/JEA)、風險型調適型原則以及資料保護來限制使用者存取權。 分隔應用程式的敏感性和功能強大的區段,只提供這些區域的授權使用者存取權。 限制可以使用您的應用程式的使用者,以及他們在應用程式中所擁有的功能。
將最低許可權建置至應用程式管理從 Microsoft 身分識別平台 接收的標識元令牌的方式。 標識元令牌中的資訊可讓您確認用戶是他們聲稱的身分。 使用者或其組織可能會指定驗證條件,例如提供 MFA、使用受管理的裝置,以及位於正確的位置。
讓客戶輕鬆地管理應用程式的授權。 減少其使用者布建額外負荷,以及手動程式的需求。 自動使用者布建 可讓IT系統管理員在目標身分識別存放區中自動建立、維護和移除使用者身分識別。 您的客戶可以使用 Microsoft Entra ID 中的應用程式布建或 HR 驅動布建,根據使用者和群組的變更進行自動化。
在您的應用程式中使用令牌宣告
在應用程式內的 UX 識別碼令牌中使用宣告,做為資料庫中的密鑰,並提供用戶端應用程式的存取權。 標識元令牌是 OpenID 連線 (OIDC) 對 OAuth 2.0 進行的核心延伸模組。 您的應用程式可以與 或 一起接收標識碼令牌,而不是存取令牌。
在安全性令牌授權的標準模式中,發行的標識元令牌可讓應用程式接收使用者的相關信息。 請勿使用識別碼令牌作為存取資源的授權程式。 授權伺服器會發出標識碼令牌,其中包含包含下列使用者資訊之宣告。
- 物件 (
aud
) 宣告是您應用程式的用戶端識別碼。 只接受 API 用戶端識別碼的令牌。 - 宣告
tid
是簽發令牌之租用戶的標識碼。 宣告oid
是可唯一識別使用者的不可變值。 當您需要將數據與用戶產生關聯時,請使用 和oid
宣告的唯一組合tid
做為索引鍵。 您可以使用這些宣告值,將數據連線回 Microsoft Entra ID 中的使用者識別碼。 - 宣告
sub
是一個不可變的值,可唯一識別使用者。 主旨宣告對於您的應用程式而言也是唯一的。 如果您使用sub
宣告將數據與用戶產生關聯,則無法從您的數據移至數據,並將它與 Microsoft Entra ID 中的使用者連線。
您的應用程式可以使用openid
範圍向 Microsoft 身分識別平台 要求標識元令牌。 OIDC 標準會 openid
控管範圍以及標識元令牌的格式和內容。 OIDC 會指定下列 範圍:
openid
使用範圍來登入使用者,並將宣告新增sub
至標識符令牌。 這些範圍提供應用程式與使用者唯一的使用者標識符,並呼叫 UserInfo端點。- 範圍會將
email
包含使用者電子郵件位址的宣告新增email
至標識元令牌。 - 範圍會將
profile
具有使用者基本配置檔屬性的宣告(名稱、用戶名稱)新增至標識元令牌。 - 範圍
offline_access
可讓應用程式存取用戶數據,即使使用者不存在也是如此。
Microsoft 驗證連結庫 (MSAL) 一律會將 openid、電子郵件和profile
範圍新增至每個令牌要求。 因此,MSAL 一律會在每次呼叫 AcquireTokenSilent
或 AcquireTokenInteractive 時傳回標識符令牌和存取令牌。 MSAL 一律會要求 offline_access
範圍。 即使要求的應用程式未指定offline_access
範圍,Microsoft 身分識別平台 一律會傳回offline_access
範圍。
Microsoft 會使用 OAuth2 標準來發行存取令牌。 OAuth2 標準表示您會收到令牌,但不會指定令牌格式或令牌中需要的內容。 當您的應用程式需要存取 Microsoft Entra ID 所保護的資源時,它應該使用資源所定義的範圍。
例如,Microsoft Graph 會 User.Read
定義範圍,授權應用程式存取目前使用者的完整使用者配置檔和租用戶名稱。 Microsoft Graph 會 定義該 API 中可用功能的完整範圍許可權 。
授權後,Microsoft 身分識別平台 會傳回應用程式的存取令牌。 當您呼叫資源時,您的應用程式會提供此令牌,做為 API HTTP 要求授權標頭的一部分。
管理令牌存留期
應用程式可以在驗證成功完成 Microsoft Entra 識別符之後,為使用者建立會話。 用戶會話管理會驅動使用者需要重新驗證的頻率。 其在將明確驗證的使用者保留在具有正確許可權的應用程式前面,以及正確時間量方面所扮演的角色至關重要。 會話存留期必須以標識碼令牌中的宣告為基礎 exp
。 宣告 exp
是標識元令牌到期的時間,之後您就無法再使用令牌來驗證使用者。
一律遵循令牌回應中針對存取令牌或exp
標識元令牌中的宣告所提供的令牌存留期。 管理令牌存留期的條件可以包含企業的登入頻率。 您的應用程式無法設定令牌存留期。 您無法要求令牌存留期。
一般而言,令牌必須有效且未到期。 物件宣告 (aud) 必須符合您的用戶端識別碼。 請確定令牌來自受信任的簽發者。 如果您有多租使用者 API,您可以選擇篩選,讓只有特定租使用者可以呼叫您的 API。 請確定您強制執行令牌的存留期。 nbf
檢查 (不是之前) 和 exp
(到期) 宣告,以確保目前的時間在這兩個宣告的值之內。
請勿針對異常長或短的會話存留期。 讓授與的標識碼 令牌存留期 推動此決策。 將應用程式的會話保持在使用中,超出令牌有效性,違反了導致IT系統管理員設定令牌有效性持續時間的規則、原則和疑慮,以防止未經授權的存取。 簡短會話會降低用戶體驗,且不一定會增加安全性狀態。 ASP.NET 等熱門架構可讓您從 Microsoft Entra ID 的標識元令牌到期時間設定會話和 Cookie 逾時。 遵循身分識別提供者的令牌到期時間,可確保使用者的會話永遠不會超過識別提供者所指定的原則。
快取和重新整理令牌
請記得適當快取令牌。 MSAL 會自動快取令牌,但令牌有存留期。 透過其存留期的完整長度使用令牌,並適當地快取令牌。 如果您重複要求相同的令牌,節流會導致應用程式回應變低。 如果您的應用程式濫用令牌發行,則向應用程式發出新令牌所需的時間會延長。
MSAL 連結庫會管理 OAuth2 通訊協定的詳細數據,包括重新整理令牌的機制。 如果您未使用 MSAL,請確定您選擇的連結庫能夠有效地使用 重新整理令牌。
當您的用戶端取得存取令牌以存取受保護的資源時,它會收到重新整理令牌。 使用重新整理令牌,在目前的存取令牌到期后取得新的存取/重新整理令牌組。 使用重新整理令牌來取得其他資源的額外存取令牌。 重新整理令牌會系結至使用者和客戶端的組合(而不是資源或租使用者)。 您可以使用重新整理令牌,在應用程式具有許可權的任何資源與租用戶組合之間取得存取令牌。
管理令牌錯誤和錯誤
您的應用程式絕對不應該嘗試驗證、譯碼、檢查、解譯或檢查存取令牌的內容。 這些作業是資源 API 的責任。 如果您的應用程式嘗試檢查存取令牌的內容,當 Microsoft 身分識別平台 發出加密令牌時,您的應用程式很可能中斷。
很少,擷取令牌的呼叫可能會因為網路、基礎結構或驗證服務失敗或中斷等問題而失敗。 如果令牌擷取失敗發生,請遵循下列最佳做法,增加應用程式中的驗證體驗復原 能力:
- 使用加密在本機快取和保護令牌。
- 請勿在不安全的通道上傳遞令牌之類的安全性成品。
- 瞭解並處理來自識別提供者的例外狀況和服務回應。
開發人員通常會有關於查看令牌內部的問題,以偵錯問題,例如從呼叫資源收到 401 錯誤。 當更多加密的令牌無法查看存取令牌時,您需要尋找查看存取令牌的替代方案。 若要進行偵錯,包含存取令牌的令牌回應會提供您需要的資訊。
在您的程式代碼中,檢查錯誤類別,而不是個別的錯誤案例。 例如,當系統未授與許可權時,處理所需的用戶互動,而不是個別錯誤。 因為您可能會錯過這些個別案例,所以最好檢查用戶互動之類的分類器,而不是深入探索個別的錯誤碼。
您可能需要回復 AcquireTokenInteractive
,並提供呼叫所需的宣告挑戰 AcquireTokenSilent
。 這樣做可確保有效管理互動式要求。
下一步
- 自定義令牌可協助您瞭解如何自定義令牌 ,以改善彈性和控制,同時以最低許可權增加應用程式零信任安全性。
- 驗證 零信任的用戶可協助開發人員瞭解在 零信任 應用程式開發中驗證應用程式使用者的最佳做法。 它描述如何使用最低許可權 零信任 原則來增強應用程式安全性,並明確驗證。
- 取得存取資源的授權可協助您瞭解如何在取得應用程式的資源訪問許可權時,最好確保 零信任。
- 設定使用者同意應用程式的方式
- 當沒有任何使用者 說明 Azure 資源的受控識別服務最佳做法時,請提供應用程式身分識別認證(非使用者應用程式)。
- 針對 Microsoft Entra 存取令牌進行疑難解答:驗證存取令牌