使用零信任原则提高应用程序安全性
不能假定构建的应用程序有一个安全的网络外围。 根据设计,将从网络外围的外部访问几乎每个开发的应用程序。 无法保证开发的应用程序是安全的,或者在部署后仍保持安全。 应用程序开发人员的责任是不仅要最大程度地提高应用的安全性,而且还要最大程度地减轻应用程序在遭到入侵时造成的损害。
此外,责任还包括支持客户和用户不断变化的需求,他们希望应用程序能够满足零信任安全要求。 了解零信任模型的原则并采用其做法。 了解并采用这些原则,可以开发更安全的、在发生安全违规时可最大程度地减轻损害的应用程序。
零信任模型规定了显式验证而不是隐式信任的惯例。 该模型立足于三项关键指导原则:
- 显式验证
- 使用最低权限访问
- 假定数据泄露
零信任最佳做法
遵循这些最佳做法使用 Microsoft 标识平台及其工具构建零信任就绪的应用程序。
显式验证
Microsoft 标识平台提供身份验证机制,用于验证访问资源的人员或服务的标识。 应用下述最佳做法,以显式验证任何需要访问数据或资源的实体。
最佳做法 | 为应用程序安全性带来的好处 |
---|---|
使用 Microsoft 身份验证库 (MSAL)。 | MSAL 是一组适用于开发人员的 Microsoft 身份验证库。 借助 MSAL,只需使用几行代码,就能对用户和应用程序进行身份验证,并获取用于访问企业资源的令牌。 MSAL 使用新式协议(OpenID Connect 和 OAuth 2.0),使应用程序不再需要直接处理用户的凭据。 随着标识提供者成为安全外围,这种凭据处理方式极大地提高了用户和应用程序的安全性。 此外,这些协议在不断发展,可以解决标识安全中的新范例、机遇和挑战。 |
在适当情况下采用增强的安全扩展,例如条件访问身份验证上下文。 | 在 Microsoft Entra ID 中,一些最常用的扩展包括条件访问、条件访问身份验证上下文和 CAE。 必须对使用增强的安全功能(例如 CAE 和条件访问身份验证上下文)的应用程序进行编码才能处理声明质询。 开放协议允许使用声明质询和声明请求来调用其他客户端功能。 这些功能可用来与 Microsoft Entra ID 继续交互,例如,在出现异常情况,或者用户身份验证条件发生更改时。 可将这些扩展编码到应用程序中,而不会干扰身份验证的主要代码流。 |
根据应用程序类型使用正确的身份验证流。 对于 Web 应用程序,请始终尝试使用机密客户端流。 | 适用于可保守机密的 Web 应用程序(机密客户端)的流被认为比公共客户端(例如桌面和控制台应用程序)更安全。 |
使用最低特权访问
开发人员使用 Microsoft 标识平台授予权限(范围),并在允许访问之前验证是否为调用方授予了适当的权限。 通过启用精细权限(这样可以授予最少量的必要访问权限)在应用程序中强制实施最低特权访问。 请考虑以下做法,以确保遵守最低特权原则:
- 评估请求的权限,确保设置绝对最低特权来完成工作。 不要创建有权访问整个 API 面的“全包式”权限。
- 设计 API 时,请提供粒度权限以允许最低特权访问。 首先将功能和数据访问权限划分为可使用范围和应用角色控制的部分。 不要以更改权限语义的方式将 API 添加到现有权限。
- 提供“只读”权限。
Write
访问权限,包括执行创建、更新和删除操作的特权。 客户端永远不应要求对只读数据提供写入访问权限。 - 提供委托权限和应用程序权限。 跳过应用程序权限可能会对实现自动化、微服务等常见方案的客户端造成硬性要求。
- 处理敏感数据时,请考虑使用“标准”和“完全”访问权限。 限制敏感属性,以避免使用“标准”访问权限(例如
Resource.Read
)访问这些属性。 然后实现“完全”访问权限(例如Resource.ReadFull
),这会返回所有包含敏感信息的可用属性。
假定数据泄露
Microsoft 标识平台应用程序注册门户是打算使用该平台解决其身份验证和相关需求的应用程序的主要入口点。 在注册和配置应用程序时,请遵循下述做法,以尽量减轻在出现安全违规时应用程序造成的损害。 有关详细信息,请参阅 Microsoft Entra 应用程序注册安全最佳做法。
考虑采取以下措施来防止安全违规:
- 正确定义应用程序的重定向 URI。 不要对多个应用程序使用相同的应用程序注册。
- 验证应用程序注册中使用的重定向 URI 以了解所有权并避免域接管。 请勿将应用程序创建为多租户类型,除非这是它的目标类型。 |
- 确保始终为租户中注册的应用程序定义并维护应用程序和服务主体所有者。