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

Microsoft 驗證連結庫 (MSAL) 定義兩種類型的用戶端:公用客戶端和機密用戶端。 用戶端是軟體實體,其具有識別提供者指派的唯一標識符。 用戶端類型可透過授權伺服器安全地進行驗證,以及保存敏感性的身分識別證明資訊,以便使用者無法在其存取範圍內存取或知道該資訊。

公用用戶端應用程式 機密用戶端應用程式
Desktop app 傳統型應用程式 Web app Web 應用程式
Browserless API 無瀏覽器 API Web API Web API
Mobile app 行動應用程式 Daemon/service 服務/精靈

公用用戶端和機密客戶端授權

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

  • 公用用戶端應用程式 會在裝置上執行,例如桌面、無瀏覽器 API、行動或用戶端瀏覽器應用程式。 他們無法信任安全地保留應用程式秘密,因為它們只能代表使用者存取 Web API。 每當指定應用程式的來源或已編譯位元組程序代碼在可讀取、反組譯或由不受信任的合作物件檢查的任何位置傳輸時,它是公用用戶端。 因為它們也只支援公用用戶端流程,而且無法保存組態時間秘密,因此他們不能有客戶端密碼。

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

秘密及其在證明身分識別方面的重要性

以下是用戶端如何向授權伺服器證明其身分識別的一些範例:

  • Azure 資源的 受控識別 – 針對僅限應用程式驗證案例,在 Azure 上建置的應用程式和服務開發人員可以選擇將秘密管理、輪替和保護卸除給平臺本身。 使用受控識別時,會使用 Azure 資源來提供和刪除身分識別,而且沒有人,包括 Global 管理員 istrator,都可以存取基礎認證。 藉由使用受控識別,您可以防止洩漏秘密的風險,並讓提供者為您處理安全性。
  • 用戶端識別碼和秘密 – 在此模式中,註冊用戶端時,授權伺服器會產生一組值。 用戶端識別碼是識別應用程式的公用值,而用戶端密碼是用來證明應用程式身分識別的機密值。
  • 證明擁有憑證 – 公鑰基礎結構 (PKI),其中包含 X.509標準,是一種基本技術,能夠透過因特網進行安全通訊,並形成因特網隱私權的骨幹。 PKI 可用來發行數位證書,以驗證參與在線通訊之各方的身分識別,而且是支援 HTTPS 等通訊協定的基礎技術,該通訊協定通常用於保護網路流量。 同樣地,憑證可用來保護 Azure 中的服務對服務通訊,方法是在服務之間啟用相互驗證。 這牽涉到每個服務將憑證呈現給另一個服務,以證明其身分識別的方式。
  • 呈現已簽署的判斷提示 – 用於工作負載身分識別同盟中,簽署的判斷提示可讓信任的第三方識別提供者令牌與 Microsoft 身分識別平台 交換,以取得存取令牌以呼叫 Microsoft Entra 受保護的資源。 工作負載身分識別同盟可用來啟用各種同盟案例,包括 Azure Kubernetes Service、Amazon Web Services EKS、GitHub Actions 等等。

證明用戶端身分識別何時很重要?

證明用戶端身分識別在授與敏感數據或資源的存取權之前,需要驗證用戶端應用程式的真實性和授權時很重要。 這些範例包含:

  • 控制 API 存取 – 如果您有計量付費的 API,或公開敏感數據或資源,您必須先確認用戶端的身分識別,再授與存取權。 例如,這在確保只有授權的應用程式可以存取 API 時很重要,且正確的客戶會針對其計量 API 使用量計費。
  • 保護使用者不受應用程式模擬 – 如果您有服務部署的使用者面向應用程式(例如後端驅動 Web 應用程式)存取敏感數據或服務,使用用戶端密碼來保護該應用程式所使用的資源,可能會防止不良執行者模擬合法用戶端給網路釣魚使用者,並外泄數據或濫用存取權。
  • S2S 通訊 – 如果您有多個需要彼此通訊的後端服務(例如下游 API),您可以驗證每個服務的身分識別,以確保它們只能存取必要的資源來執行其功能。

一般而言,證明用戶端身分識別在需要驗證和授權與用戶無關或以外的用戶端時很重要。

機密用戶端:管理秘密的最佳做法

使用受控識別來簡化部署和安全性受控識別 會在 Microsoft Entra 識別碼中提供自動受控識別,讓應用程式在連線到支援 Microsoft Entra 驗證的資源時使用。 應用程式可以使用受控識別來取得僅限 Microsoft Entra ID 應用程式令牌,而不需要管理認證。 這可以移除許多與秘密管理相關聯的複雜度,同時增加安全性和復原能力。 如果您使用受控識別,則大部分,如果不是下列所有最佳做法都已為您處理。

使用安全記憶體 – 將用戶端密碼儲存在安全的位置,例如 金鑰保存庫加密的組態檔。 請避免將客戶端密碼儲存為純文字或簽入檔案至版本控制系統。

限制存取 - 將客戶端密碼的存取限制為僅限授權人員。 使用 角色型訪問控制 ,將客戶端密碼的存取限制為僅需要用戶端秘密執行其作業職責的人員。

輪替客戶端密碼視需要或排程輪替客戶端密碼 ,可將遭入侵的秘密風險降到最低,以取得未經授權的存取權。 套用時,建議金鑰繼續使用的時間範圍會受到所使用的密碼編譯演算法強度和/或遵守標準或法規合規性做法的影響。

使用長秘密和強式加密 – 與上一點密切相關,針對傳輸中數據使用強式加密 演算法(在網路上)和待用數據(磁碟上)都有助於確保高 entropy 秘密不太可能受到暴力破解。 AES-128(或更高版本)等演演算法有助於保護待用數據,而 RSA-2048 (或更高版本)則有助於有效率地保護傳輸中的數據。 由於網路安全性的不斷演變本質,建議諮詢您的安全性專家,並定期檢閱您的演算法選擇是最佳作法。

避免硬式編碼秘密 – 不要在原始程式碼中硬式編碼客戶端密碼。 避免原始程式碼中的秘密可將不良執行者取得原始程式碼存取權的值降到最低。 它也可以防止這類秘密意外被推送至不安全的存放庫,或提供給可能具有來源存取權,但無法存取秘密的項目參與者使用。

監視洩露秘密 的存放庫 – 處理原始程式碼時發生錯誤簽入是一個不幸的事實。 Git 預先認可攔截是防止意外簽入的建議方式,但也不是監視的替代方法。 儲存機制的自動化監視可以識別洩露的秘密,並透過計劃輪替遭入侵的認證,有助於減少安全性事件。

監視可疑活動監視 與用戶端秘密相關的可疑活動的記錄和稽核線索。 盡可能使用自動化警示和回應程式來通知人員,並定義與用戶端秘密相關的異常活動應變。

客戶端密碼架構您的應用程式 – 您的安全性模型只會像鏈結中最弱的連結一樣強大。 請勿將安全性認證或令牌從機密轉送至公用客戶端,因為這可能會將用戶端秘密數據移至公用用戶端,以模擬機密用戶端。

使用來自受信任來源的最新連結庫和 SDK – Microsoft 身分識別平台 提供各種客戶端和伺服器 SDK 和中間件,旨在提升生產力,同時保護應用程式的安全。 Microsoft.Identity.Web連結庫可簡化將驗證和授權新增至 Microsoft 身分識別平台 上的 Web 應用程式和 API。 保持相依性更新有助於確保您的應用程式和服務受益於最新的安全性創新和更新。

比較客戶端類型及其功能

以下是公用和機密用戶端應用程式之間的一些相似之處和差異:

  • 這兩種應用程式類型都會維護使用者令牌快取,而且可以無訊息方式取得令牌(當令牌存在於快取中時)。 機密用戶端應用程式也有應用程式令牌快取,可供應用程式本身取得的令牌。
  • 這兩種應用程式類型都可以管理用戶帳戶,並從使用者令牌快取取得帳戶、從其標識元取得帳戶,或移除帳戶。
  • 在 MSAL 中,公用用戶端應用程式有四種方式可透過個別的驗證流程來取得令牌。 機密用戶端應用程式只有三種方式可取得令牌,還有一種方式可計算識別提供者授權端點的 URL。 用戶端 識別碼 會在應用程式的建構時傳遞一次,且在應用程式取得令牌時不需要再次傳遞。 如需詳細資訊,請參閱 取得令牌

公用客戶端對於啟用使用者委派存取受保護的資源很有用,但無法證明自己的應用程式身分識別。 另一方面,機密用戶端可以同時執行使用者和應用程式驗證和授權,而且必須考慮到安全性,以確保其秘密不會與公用用戶端或其他第三方共用。

在某些情況下,例如 S2S 通訊,例如受控識別的基礎結構,可大幅簡化服務的開發與部署,並移除通常與秘密管理相關聯的許多複雜度。 當無法使用受控識別時,請務必有原則、預防措施和應變措施,以保護秘密,並回應與其相關的安全性事件。

另請參閱

如需應用程式設定和具現化的詳細資訊,請參閱: