驗證 零信任 的使用者
本文可協助您身為開發人員,瞭解在 零信任 應用程式開發中驗證應用程式使用者的最佳做法。 請務必使用最低許可權的 零信任 原則來增強應用程式安全性,並明確驗證。
用戶驗證中的標識碼令牌
當您需要使用者向您的應用程式進行驗證,而不是收集使用者名稱和密碼時,您的應用程式可以要求 身分識別 (ID) 令牌。 透過 Microsoft 身分識別平台 驗證使用者,可避免在應用程式保留使用者認證時發生的安全性風險。 當您要求標識碼令牌時,如果不良動作項目違反或入侵您的應用程式,則應用程式中沒有使用者名稱和對應的密碼。
Microsoft 身分識別平台 標識碼令牌是 OpenID Connect (OIDC) 標準的一部分,該標準會將標識元令牌指定為 JSON Web 令牌(JWT)。 JWT 長字串包含三個元件:
- 標頭宣告。 標識元令牌中存在的標頭宣告包括
typ
(類型宣告)、alg
(簽署令牌的演算法),以及kid
(公鑰的指紋來驗證令牌的簽章)。 - 承載宣告。 承載或本文(JSON Web 令牌的中間部分)包含一系列名稱屬性組。 標準要求有一個宣告,其具有
iss
(簽發者名稱) 會移至簽發令牌的應用程式(aud
或物件宣告)。 - 簽章。 Microsoft Entra ID 會產生令牌簽章,應用程式可用來驗證令牌是否未經修改,而且您可以信任令牌。
下列標識元令牌範例會顯示使用者的相關信息,並確認驗證使用應用程式。
{
"typ": "JWT",
"alg": "RS256",
"kid": "1LTMzakihiRla_8z2BEJVXeWMqo"
}.
{
"ver": "2.0",
"iss": "https://login.microsoftonline.com/3338040d-6c67-4c5b-b112-36a304b66dad/v2.0",
"aud": "00001111-aaaa-2222-bbbb-3333cccc4444",
"exp": 1536361411,
"iat": 1536274711,
"nbf": 1536274711,
"sub": "AAAAAAAAAAAAAAAAAAAAAIkzqFVrSaSaFHy782bbtaQ",
"name": "Abe Lincoln",
"preferred_username": "AbeLi@microsoft.com",
"oid": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"tid": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
}.
.[Signature]
存取管理中的識別碼令牌
若要接收您的應用程式(用戶端)識別碼,請使用 Microsoft 身分識別平台 註冊您的應用程式。 當您收到符合您應用程式用戶端標識符的物件宣告 (aud
) 令牌時,令牌中已識別的使用者會向您的應用程式驗證。 IT 系統管理員可能會允許租使用者中的所有使用者使用您的應用程式。 他們可能會允許使用者所屬的群組使用您的應用程式。
如果您收到的物件宣告與應用程式用戶端識別碼不同的令牌,請立即拒絕令牌。 使用者不會向您的應用程式進行驗證,因為它們已登入另一個應用程式。 請務必確定用戶有權使用您的應用程式。
這些宣告詳細資料在使用者驗證中很重要:
- JSON Web 令牌有效,直到到期為止。
exp
(到期) 宣告會告訴您令牌何時到期。 如果目前時間在宣告中的exp
時間之前,令牌是有效的。 - 請勿將使用者視為在 (不在時間之前) 宣告中指定的
nbf
時間之前通過驗證。 令牌nbf
的和exp
時間會定義令牌的有效存留期。 到期時間即將到期時,請確定您取得新的標識元令牌。 sub
(subject 宣告) 是應用程式使用者的唯一標識符。 相同的用戶對於其他應用程式有不同的sub
宣告。 如果您想要儲存數據以與用戶產生關聯,並防止攻擊者進行該關聯,請使用主體宣告。 因為它不會公開使用者的Microsoft Entra 身分識別,所以這是將數據與用戶產生關聯的最私人方式。 宣告sub
是不可變的。- 如果您想要跨多個應用程式共享資訊,請使用租使用者標識碼 () 和對象識別碼 (
tid
oid
) 宣告的組合,這些宣告對使用者而言是唯一的。 合併的租用戶標識碼和對象標識碼是不可變的。 - 無論個人身分識別發生什麼情況,
sub
、oid
和tid
宣告仍然不可變。 使用者的任何專案都可以變更,您仍然可以根據主旨或合併tid
和oid
宣告來識別用戶的數據。
使用 OIDC 進行驗證
為了示範使用者驗證,讓我們看看使用 OIDC 來驗證使用者的應用程式。 相同的原則適用於使用安全性判斷提示標記語言 (SAML) 或 WS-Federation 的應用程式。
當應用程式向 Microsoft 身分識別平台 要求標識碼令牌時,應用程式會驗證使用者。 工作負載(沒有使用者存在,而是以服務、背景進程、精靈身分執行的應用程式)略過此步驟。
您應該一律先以無訊息方式要求此令牌。 若要在 Microsoft 驗證連結庫 (MSAL) 中以無訊息方式取得令牌,您的應用程式可以從方法開始AcquireTokenSilent
。 如果您的應用程式可以在不干擾用戶的情況下進行驗證,則會接收要求的標識元令牌。
如果 Microsoft 身分識別平台 無法完成要求而不與用戶互動,則您的應用程式必須回復至 MSAL AcquireTokenInteractive
方法。 若要以互動方式取得令牌,請開啟Web表面至網域底下的 https://login.microsoftonline.com
位址來執行要求。
在此 Web 介面中,使用者與 Microsoft 身分識別平台 有私人交談。 您的應用程式沒有此交談的檢視,也無法控制對話。 Microsoft 身分識別平台 可以要求使用者標識碼和密碼、多重要素驗證 (MFA)、無密碼驗證,或 IT 系統管理員或使用者設定的其他驗證互動。
您的應用程式會在使用者執行必要的驗證步驟之後收到標識元令牌。 當您的應用程式收到令牌時,您可以確定 Microsoft 身分識別平台 已驗證使用者。 如果您的應用程式未收到標識元令牌,則 Microsoft 身分識別平台 未驗證使用者。 不允許未經驗證的用戶繼續進入應用程式的安全區域。
應用程式在收到來自 Microsoft Entra 識別碼的標識碼令牌之後,最好為使用者建立會話。 在應用程式收到的標識碼令牌中,具有 Unix 時間戳的到期 (exp
) 宣告。 此時間戳會 指定應用程式不得接受 JWT 進行處理的到期日或之後 。 使用此令牌到期時間來驅動用戶會話的存留期。 宣告 exp
在將明確驗證的使用者保留在具有正確許可權和正確時間量的應用程式前面,扮演了重要角色。
單一登入支援
單一登錄 (SSO) 驗證可讓使用者使用一組認證登入多個獨立軟體系統。 SSO 可讓應用程式開發人員不需要使用者個別和重複地登入每個應用程式。 在 SSO 的核心,開發人員可確保使用者裝置上的所有應用程式都會共用驗證使用者的 Web 介面。 成功驗證磁碟驅動器 SSO 之後,Web 介面上的成品(例如工作階段狀態和 Cookie)。
如下圖所示,共用 Web 表面最簡單的使用案例是在網頁瀏覽器中執行的應用程式(例如 Microsoft Edge、Google Chrome、Firefox、Safari)。 瀏覽器索引標籤會共用 SSO 狀態。
Microsoft 身分識別平台 會管理任何特定瀏覽器中的 SSO 狀態,除非使用者在相同裝置上開啟不同的瀏覽器。 在 Windows 10 和更新版本上,Microsoft 身分識別平台 原生支持瀏覽器 SSO Microsoft Edge。 當使用者登入 Windows 時,Google Chrome(透過 Windows 10 帳戶擴充功能)和 Mozilla Firefox v91+ 中的住宿(透過瀏覽器設定)允許每個瀏覽器共用 Windows 本身的 SSO 狀態。
如下圖所示,原生應用程式使用案例更為複雜。
驗證代理人方法
常見的模式是讓每個原生應用程式有自己的內嵌 WebView,以防止它參與 SSO。 若要解決此問題,Microsoft Entra ID 會針對原生應用程式使用 驗證代理程式 (auth broker)方法,如下圖所示。
有了驗證代理程式,應用程式會將驗證要求傳送至訊息代理程式,而不是直接傳送至 Microsoft 身分識別平台。 如此一來,訊息代理程式就會成為裝置上所有驗證的共用介面。
除了提供共用介面之外,驗證代理程式還提供其他優點。 採用 零信任 時,企業可能只想要讓應用程式從企業管理的裝置執行。 企業裝置管理的範例包括完整的行動裝置 裝置管理(MDM),以及使用者攜帶自己的裝置參與行動應用程式管理(MAM) 的案例。
根據設計,基礎操作系統 (OS) 會隔離瀏覽器。 開發人員需要與OS更緊密的連線,才能完整存取裝置詳細數據。 在 Windows 中,驗證代理人是 Windows Web 帳戶管理員 (WAM)。 在其他裝置上,驗證代理人是Microsoft Authenticator 應用程式(適用於執行 iOS 或 Android 的裝置)或 公司入口網站 應用程式(適用於執行 Android 的裝置)。 應用程式會使用 MSAL 存取驗證代理人。 在 Windows 中,應用程式可以存取不含 MSAL 的 WAM。 不過,MSAL 是應用程式存取驗證代理人的最簡單方式(尤其是未 通用 Windows 平台 應用程式的應用程式)。
驗證代理人會與 Microsoft Entra ID 搭配運作,以利用 主要重新整理令牌 (PRT) 來減少使用者多次驗證的需求。 PRT 可以判斷使用者是否在受管理的裝置上。 Microsoft Entra 識別碼需要驗證代理人,因為它引進 了擁有權證明令牌,這是對目前普遍存在的持有人令牌更安全的選項。
下一步
- 針對Microsoft Entra 存取令牌進行疑難解答:驗證存取令牌 說明當您有Microsoft Entra 存取令牌時,您確認特定欄位符合記錄。
- 增加您開發系列之驗證和授權應用程式的復原能力,這些應用程式會使用 Microsoft 身分識別平台 和 Microsoft Entra ID。 其中包括代表登入使用者和精靈應用程式運作的用戶端和服務應用程式指引,以及代表自己運作的精靈應用程式。 其中包含使用權杖和呼叫資源的最佳做法。
- 自定義令牌 描述您可以在 Microsoft Entra 令牌中接收的資訊,以及如何自定義令牌。
- 在令牌 中設定群組宣告和應用程式角色會示範如何使用應用程式角色定義來設定應用程式,並將安全組指派給應用程式角色。
- 建置可透過許可權和同意 保護身分識別的應用程式,提供許可權和存取最佳做法的概觀。