Microsoft Entra ID 中應用程式屬性的安全性最佳做法
在 Microsoft Entra ID 中註冊應用程式時,安全性是一項重要概念並是組織中商務用途的重要部分。 應用程式的任何設定錯誤都會導致停機或入侵。 取決於新增至應用程式的權限,可能會對整個組織造成影響。
由於安全應用程式對組織而言至關重要,因此因安全性問題對應用程式造成的任何停機都可能會影響企業或企業所依賴的某些重要服務。 因此,請務必配置時間和資源,以確保應用程式一律會維持良好的安全狀態。 對應用程式進行定期安全性和健康狀態評量,如同您對程式碼進行安全性威脅模型評量一樣審慎。 如需更廣泛的組織安全性觀點,請參閱安全性開發週期 (SDL) (英文)。
本文描述下列應用程式屬性的安全性最佳做法:
- 重新導向 URI
- 存取權杖 (用於隱含流程)
- 憑證與祕密
- 應用程式識別碼 URI
- 應用程式擁有權
重新導向 URI
務必將應用程式的重新導向 URI 保持最新狀態。 在 Azure 入口網站中應用程式的 [驗證] 下,必須選取應用程式的平台,接著便可以定義 [重新導向 URI] 屬性。
請考慮下列重新導向 URI 的指引:
- 維護所有 URI 的擁有權。 任何一個重新導向 URI 擁有權中的疏失都可能導致應用程式遭到入侵。
- 確定所有 DNS 記錄都會針對變更,定期進行更新及監視。
- 請勿使用萬用字元回覆 URL 或不安全的 URI 配置,例如 http 或 URN。
- 將清單保持精簡。 修剪任何不必要的 URI。 如果可行,請將 URL 從 Http 更新為 Https。
存取權杖 (用於隱含流程)
之前需要「隱含流程」的案例現在可以使用「驗證碼流程」,以降低與誤用隱含流程相關聯的入侵風險。 在 Azure 入口網站中應用程式的 [驗證] 下,必須選取應用程式的平台,接著便可以適當設定 [存取權杖 (用於隱含流程)] 屬性。
請考慮下列與隱含流程相關的指引:
- 了解是否需要隱含流程。 除非明確要求,否則請勿使用隱含流程。
- 如果應用程式已設定為使用隱含流程以接收存取權杖,但未主動使用這些權杖,請關閉設定以避免誤用。
- 針對有效的隱含流程案例,使用個別的應用程式。
憑證與祕密
當使用憑證和秘密作為機密用戶端時,憑證和秘密 (也稱為認證) 是應用程式的重要部分。 在 Azure 入口網站中應用程式的 [憑證和秘密] 下,可以新增或移除憑證和秘密。
請考慮下列與憑證和秘密相關的指引:
- 請盡可能一律使用憑證認證,並不要使用密碼認證 (也稱為秘密)。 雖然使用密碼祕密作為認證很方便,但請盡可能您將 x509 憑證作為取得應用程式權杖的唯一認證類型。
- 設定應用程式驗證方法原則 (英文),藉由限制其存留期或完全封鎖其使用,以控管祕密的使用。
- 使用具有受控識別的 Key Vault 來管理應用程式的認證。
- 如果應用程式只作為公用用戶端應用程式 (允許使用者使用公用端點登入),請確保應用程式物件上沒有指定的認證。
- 檢閱應用程式中使用的認證,以了解有效使用時間及其到期日。 應用程式上未使用的認證可能導致安全性缺口。 經常變換認證,且不會跨應用程式共用認證。 請勿在一個應用程式上有多個認證。
- 監視生產管線,防止將任何種類的認證認可至程式碼存放庫。
- 認證掃描器是一種靜態分析工具,可用於偵測原始程式碼中的認證 (以及其他敏感性內容) 並建置輸出。
應用程式識別碼 URI
應用程式的 [應用程式識別碼 URI] 屬性會指定用來識別 Web API 的全域唯一 URI。 其是範圍和存取權杖中的前置詞,也是對象宣告的值,且其必須使用已驗證的客戶擁有網域。 若為多租用戶應用程式,此值也必須是全域唯一的。 它也稱為識別碼 URI。 在 Azure 入口網站中應用程式的 [公開 API] 下,即可定義 [應用程式識別碼 URI] 屬性。
請考慮下列與定義應用程式識別碼 URI 相關的指引:
- 建議使用 API 或 HTTPS URI 配置。 以支援的格式設定屬性,以避免組織中發生 URI 衝突。 請勿使用萬用字元。
- 在企業營運 (LoB) 應用程式中使用已驗證的網域。
- 在組織中保留 URI 的詳細目錄,有助於維護安全性。
- 使用應用程式識別碼 URI 來公開組織中的 WebApi。 請勿使用應用程式識別碼 URI 來識別應用程式,並改為使用應用程式 (用戶端) 識別碼屬性。
支援下列 API 和以 HTTP 配置為基礎的應用程式識別碼 URI 格式。 將預留位置值取代為下表清單中所述的項目。
支援的應用程式識別碼 URI 格式 |
範例應用程式識別碼 URI |
---|---|
api://<應用程式識別碼> | api://00001111-aaaa-2222-bbbb-3333cccc4444 |
api://<租用戶識別碼>/<應用程式識別碼> | api://aaaabbbb-0000-cccc-1111-dddd2222eeee/00001111-aaaa-2222-bbbb-3333cccc4444 |
api://<租用戶識別碼>/<字串> | api://aaaabbbb-0000-cccc-1111-dddd2222eeee/api |
api://<字串>/<應用程式識別碼> | api://productapi/00001111-aaaa-2222-bbbb-3333cccc4444 |
https://<tenantInitialDomain>.onmicrosoft.com/<字串> | https://contoso.onmicrosoft.com/productsapi |
https://<已驗證的自訂網域>/<字串> | https://contoso.com/productsapi |
https://<字串>.<已驗證的自訂網域> | https://product.contoso.com |
https://<字串>.<已驗證的自訂網域>/<字串> | https://product.contoso.com/productsapi |
- <appId>:應用程式物件的應用程式識別碼 (appId) 屬性。
- <string>:主機或 API 路徑線段的字串值。
- <tenantId>:Azure 所產生的 GUID,用來代表 Azure 內的租用戶。
- <tenantInitialDomain> - <tenantInitialDomain>.onmicrosoft.com,其中 <tenantInitialDomain> 是租用戶建立者在建立租用戶時指定的初始網域名稱。
- <verifiedCustomDomain>:為 Microsoft Entra 租用戶設定的已驗證自訂網域。
注意
如果您使用 api:// 配置,請直接在 "api://" 之後新增字串值。 例如 api://<字串>。 該字串值可以是 GUID 或任意字串。 如果您新增 GUID 值,其必須符合應用程式識別碼或租用戶識別碼。 應用程式識別碼 URI 值對租用戶來說必須是唯一的。 如果您新增 api://<租用戶識別碼> 作為應用程式識別碼 URI,其他人將無法在任何其他應用程式中使用該 URI。 建議使用 api://<應用程式識別碼>,或改為使用 HTTP 配置。
重要
應用程式識別碼 URI 值不得以斜線 “/” 字元結尾。
應用程式擁有權設定
擁有者可以管理已註冊應用程式的所有層面。 請務必定期檢閱組織中所有應用程式的擁有權。 如需詳細資訊,請參閱Microsoft Entra 存取權檢閱 (部分機器翻譯)。 在 Azure 入口網站中應用程式的 [擁有者] 下,即可管理應用程式的擁有者。
請考慮下列與指定應用程式擁有者相關的指引:
- 應用程式擁有權應保留給組織內最低限度的人員。
- 系統管理員應每隔幾個月檢閱一次擁有者清單,以確保擁有者仍屬於組織的一部分且仍應擁有應用程式。
整合助理
Azure 入口網站中的「整合小幫手」可用來確保應用程式符合高品質,並提供安全的整合。 整合小幫手醒目提示最佳做法和建議,有助於避免與 Microsoft 身分識別平台整合時的常見疏失。
下一步
- 如需有關驗證碼流程的詳細資訊,請參閱 OAuth 2.0 授權碼流程。