保护应用程序模型框架

Microsoft 正在引入一个安全且可缩放的框架,用于通过 Microsoft Azure 多重身份验证 (MFA) 体系结构对云解决方案提供商 (CSP) 合作伙伴和 控制面板 供应商 (CPV) 进行身份验证。 CSP 合作伙伴以及 控制面板 供应商可以依赖新模型提升 API 集成调用合作伙伴中心的安全性。 这将帮助所有参与方(包括 Microsoft、CSP 合作伙伴控制面板供应商)保护其基础结构和客户数据免受安全风险的影响。

范围

本文适用于以下合作伙伴:

  • 控制面板供应商 (CPV) 是独立的软件供应商,他们开发应用供 CSP 合作伙伴使用,以与 合作伙伴中心 API 集成。 CPV 不是直接访问合作伙伴仪表板或 API 的 CSP 合作伙伴。 它们是开发应用程序的公司 (Web 应用) 使 CSP 能够通过统一市场销售其产品。
  • 使用“应用 ID + 用户”身份验证并直接与合作伙伴中心 API 集成的 CSP 间接提供商和 CSP 直接合作伙伴。

注意

若要符合 CPV 条件,必须先以 CPV 合作伙伴中心加入 CPV。 如果你是也是 CPV 的现有 CSP 合作伙伴,则此先决条件也适用于你。

安全应用程序开发

在代表 CSP 订购 Microsoft 产品的过程中,CPV 的市场应用程序与 Microsoft API 交互,以代表 CSP 为客户下订单和预配资源。

其中一些 API 包括:

  • 合作伙伴中心商务操作(如下订单和管理订阅生命周期)的 API。
  • Microsoft Graph为 CSP 租户和 CSP 客户的租户实现标识管理的 API。
  • Azure 资源管理器 (AZURE) 功能的 ARM 部署 API。

CSP 合作伙伴有权在调用 Microsoft API 时代表其客户执行委托的权限。 通过委托的权限,CSP 合作伙伴可以为客户完成购买、部署和支持方案。

市场应用程序旨在帮助 CSP 合作伙伴为客户列出其解决方案。 为此,市场应用程序需要模拟 CSP 合作伙伴特权来调用 Microsoft API。

由于 CSP 合作伙伴特权非常高,并且可为合作伙伴的所有客户提供访问权限,因此,必须了解如何设计这些应用程序来承受安全利用途径,这一点非常重要。 对这些敏感应用程序的安全攻击可能会导致客户数据受到损害。 因此,权限授予和合作伙伴特权模拟必须设计为遵循最低特权原则。 以下原则和最佳做法可确保市场应用程序是可持续且可承受的入侵。

凭据模拟的安全原则

  • 市场应用程序不得存储 CSP 合作伙伴提供的任何凭据。

  • 不应共享 CSP 合作伙伴用户密码。

  • CSP 合作伙伴租户 Web 应用密钥不得与云控制面板共享。

  • 市场应用程序必须提供应用程序标识以及合作伙伴信息,而不是在调用模拟 CSP 合作伙伴标识时仅使用合作伙伴凭据。

  • 对市场应用程序的访问权限必须基于最低特权原则,并且必须在权限中明确表述。

  • 市场应用程序的授权必须透视到多个凭据。

  • 必须同时提供应用程序凭据和合作伙伴凭据才能获取访问权限。

    重要

    没有单一的泄漏点非常重要。

  • 访问必须仅限于特定的受众或 API。

  • 访问必须标识模拟的用途。

  • 市场应用程序的访问权限必须具有时间限制。 CSP 合作伙伴必须能够续订或撤销对市场应用程序的访问权限。

  • 必须实施快速控制或修正过程,以处理市场应用程序凭据泄露。

  • 所有用户帐户都应使用双因素身份验证 (2FA) 。

  • 应用程序模型应可友好地用于其他安全规定,例如对更好的安全模型的条件访问。

注意

使用应用 ID + 用户身份验证并直接与 合作伙伴中心 API 集成的用户云解决方案提供商间接提供商和 CSP 直接合作伙伴需要遵循上述原则保护其自己的市场应用程序。

应用程序标识和概念

多租户应用程序

多租户应用程序通常是 SaaS (服务) 软件。 可以通过在 Azure 仪表板上将Azure Active Directory (Azure AD) 类型配置为多租户,将应用程序配置为接受来自任何租户的登录 任何 Azure AD 租户中的用户在同意配合应用程序使用其帐户之后,便可登录到应用程序。

若要详细了解如何创建多租户应用程序,请参阅使用多租户Azure Active Directory登录任何租户用户

若要让用户登录到 Azure AD 中的应用程序,应用程序必须表示在用户的租户中。 这样,组织便可以采取一些措施,例如,当其租户中的用户登录应用程序时应用唯一策略。 对于单个租户应用程序,此注册非常简单:这是在 Azure 仪表板中注册应用程序时发生的注册。

对于多租户应用程序,应用程序的初始注册过程是在开发人员使用的 Azure AD 租户中进行的。 当来自不同租户的用户首次登录应用程序时,Azure AD 会要求他们同意应用程序所请求的权限。 如果用户同意,将在用户的租户中创建名为服务主体的应用程序的表示形式,并且登录过程可以继续。 还会在目录中创建一个委派,该目录记录用户对应用程序的同意。

注意

使用应用 ID + 用户身份验证并直接与 合作伙伴中心 API 集成时,CSP 间接提供商和 CSP 直接合作伙伴必须使用相同的许可框架同意其市场应用程序。

许可体验受应用程序请求的权限影响。 Azure AD 支持两种类型的权限:仅限应用的权限和委托的权限。

  • 仅应用权限 直接授予应用程序的标识。 例如,可以授予应用程序读取租户中用户列表的权限,而不考虑登录应用程序的用户。
  • 委托的权限 授予应用程序充当已登录用户的能力,供用户执行一部分操作。 例如,你可以向应用程序授予读取已登录用户的日历的委托权限。

某些权限可以由普通用户许可,而其他权限则需要租户管理员的许可。 有关许可框架Azure Active Directory,请参阅了解Azure AD许可体验

OAuth 令牌流 (多租户) 授权

在多租户应用程序中, (OAuth) 流中,该应用程序表示为 CPV 或 CSP 合作伙伴租户中的多租户应用程序。

若要访问 Microsoft API (合作伙伴中心 API、Graph API 等) ,CSP 合作伙伴必须登录应用程序并同意允许应用程序代表他们调用 API。

注意

使用应用 ID 和用户身份验证并直接与 合作伙伴中心 API 集成的用户云解决方案提供商间接提供商和 CSP 直接合作伙伴必须同意其市场应用程序使用相同的许可框架。

应用程序通过许可和 OAuth 授权Graph访问合作伙伴合作伙伴中心 API 等资源。

创建多租户应用程序

多租户应用程序必须遵循以下要求:

  • 它必须是具有应用程序 ID 和密钥的 Web 应用。
  • 必须关闭隐式身份验证模式。

此外,我们建议遵循以下最佳做法:

  • 对密钥使用证书。
  • 启用条件访问以应用 IP 范围限制。 这可能需要在租户上启用Azure AD功能。
  • 为应用程序应用访问令牌生存期策略。

获取令牌时,必须提供应用 ID 和密钥。 密钥可以是证书。

可以将应用程序配置为调用多个 API,包括Azure 资源管理器 API。 下面是这些 API 所需的最低权限合作伙伴中心集:

  • Azure Active Directory委托的权限:以已登录用户访问目录
  • 合作伙伴中心 API 委托的权限: 访问

多租户应用程序必须获取合作伙伴同意,并使用同意和授权进一步调用 合作伙伴中心 API。 许可是通过 OAuth 身份验证代码流获取的。

若要获得同意,CPV 或 CSP 合作伙伴必须构建一个加入网站,该网站可以接受 Azure Active Directory 中的身份验证代码授予。

有关详细信息,请参阅使用 OAuth 2.0 代码授予流授权访问 Azure Active 和 Directory Web 应用程序。

下面是多租户应用程序捕获 CSP 伙伴许可的步骤,以及用于调用合作伙伴中心 Api 的可重复使用的令牌。

使用以下步骤获取合作伙伴许可。

  1. 构建合作伙伴载入 web 应用程序,该应用程序可以托管同意链接,以便合作伙伴可以通过单击接受多租户应用程序的同意。
  2. CSP 合作伙伴单击许可链接。 例如: https://login.microsoftonline.com/common/oauth2/authorize?&client_id=<marketplaceappid>&response_ty
  3. Azure AD 登录页说明了将代表用户授予应用程序的权限。 CSP 合作伙伴可以决定使用管理代理或销售代理凭据登录并批准许可。 根据用于登录的用户角色,向应用程序授予权限。
  4. 授予同意后,Azure Active Directory 创建 CPV 的多租户应用程序的服务主体到 CSP 合作伙伴的租户中。 应用程序被授予代表用户执行的 OAuth 授权。 这些准许允许多租户应用程序代表合作伙伴调用合作伙伴中心 Api。 此时,Azure AD 登录页面将重定向到合作伙伴载入 web 应用程序。 Web 应用程序从 Azure AD 接收授权代码。 合作伙伴载入 web 应用程序必须结合使用授权代码和应用程序 ID 和机密密钥,才能调用 Azure AD令牌 API来获取刷新令牌。
  5. 安全地存储刷新令牌。 刷新令牌是合作伙伴凭据的一部分,用于代表合作伙伴获取对合作伙伴中心 Api 的访问权限。 获取刷新令牌后,对其进行加密,并将其存储在密钥存储中,例如 Azure 密钥保管库

令牌请求调用流

在调用合作伙伴中心 Api 之前,CPV 的或 CSP 合作伙伴的应用程序必须获取访问令牌。 这些 Api 在资源 URL https://api.partnercenter.microsoft.com 上表示。

CPV 应用程序应该确定必须模拟哪个合作伙伴帐户,才能根据产品或联合登录调用合作伙伴中心 Api。 应用程序从密钥存储中检索该合作伙伴租户的加密刷新令牌。 必须在使用之前对刷新令牌进行解密。

对于仅有一个租户授予许可的 CSP 合作伙伴,合作伙伴帐户指代 CSP 合作伙伴的租户。

刷新令牌是多用户令牌。 这意味着,可以使用刷新令牌根据授予的同意为多个受众获取令牌。 例如,如果为合作伙伴中心 api 和 Microsoft Graph api 提供合作伙伴许可,则可以使用刷新令牌来请求两个 api 的访问令牌。 访问令牌将使用 "代表" 授权,并允许 marketplace 应用程序模拟在调用这些 Api 时同意的合作伙伴。

一次只能为一个受众获取访问令牌。 如果应用程序需要访问多个 Api,则必须为目标受众请求多个访问令牌。 若要请求访问令牌,应用程序需要调用 Azure AD令牌 API。 此外,它还可以使用 Azure AD SDK 的AuthenticationContext. AcquireTokenAsync并传入以下信息:

  • 资源 URL,是要调用的应用程序的终结点 URL。 例如,Microsoft 合作伙伴中心 API 的资源 URL 为 https://api.partnercenter.microsoft.com
  • 包含 web 应用的应用程序 ID 和密钥的应用程序凭据。
  • 刷新令牌

生成的访问令牌将允许应用程序调用资源中所述的 Api。 应用程序无法为未被授予同意请求的权限的 Api 请求访问令牌。 UserPrincipalName (UPN) 特性值是用户帐户的 Azure AD 用户名。

其他注意事项

条件性访问

当涉及到管理云资源时,云安全的一个重要方面就是身份和访问。 在移动优先、云优先的世界,用户可以从任意位置使用各种设备和应用访问组织的资源。 只需将可以访问资源的人员集中在一起即可。 若要在安全性和工作效率之间取得平衡,还需要考虑资源的访问方式。 通过使用 Azure AD 条件性访问,可以满足此要求。 使用条件访问时,可以根据条件就云应用的访问实施自动化的访问控制决策。

有关详细信息,请参阅什么是 Azure Active Directory 中的条件性访问?

基于 IP 范围的限制

你可以将令牌限制为仅颁发给特定范围的 IP 地址。 此功能有助于限制特定网络的攻击面。

多重身份验证

强制多重身份验证通过对两个或更多窗体强制凭据验证来帮助限制凭据泄露情况。 此功能允许 Azure AD 在颁发令牌之前通过安全辅助通道(如移动或电子邮件)来验证调用方的身份。

有关详细信息,请参阅 它的工作原理: Azure 多个。

后续步骤