你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

用于 SaaS 开发的入门 Web 应用

Azure 应用程序服务
Microsoft Entra 外部 ID
Azure SQL 数据库
Azure 逻辑应用
Azure Resource Manager

软件即服务 (SaaS) 是一个复杂的主题,其中需要考虑很多要点。 在 Azure 上构建 SaaS 解决方案的独立软件供应商 (ISV) 需要解决类似于下面的问题就此做出决定:

  • 我应使用哪个 租赁模型
  • 如何设置要在多租户体系结构中使用的标识解决方案?
  • 如何处理新客户的加入?

此体系结构旨在回答其中的一部分问题,并为进入 SaaS 世界提供一个起点。 此体系结构能够适应各种方案。

可能的用例

下面是可以使用此体系结构的一些示例用例:

  • 将现有应用程序现代化,以便在过渡到基于SaaS 的业务模型过程中支持完整多租户。
  • 开发全新的 SaaS 产品。
  • 将 SaaS 产品/服务从其他云服务迁移到 Azure。

体系结构

显示控制平面、标识框架和最终用户 S a S 应用程序的体系结构关系图。

下载此体系结构的 PowerPoint 文件

术语

下表描述了本文中出现的术语。

术语 说明 示例
SaaS 供应商或 ISV 拥有 SaaS 应用程序和代码并销售 SaaS 产品的实体。 销售 SaaS 应用程序 Contoso Tickets 的 Contoso Inc。
租户 从 SaaS 供应商处购买的 SaaS 应用程序实例。 Fourth Coffee Shop。
SaaS 客户管理员 购买或管理应用程序租户的人员。 Fourth Coffee Shop 的老板 Joe。
SaaS 客户用户 使用但不管理应用程序租户的人员,他们通常与 SaaS 客户管理员属于同一公司或组。 Fourth Coffee Shop 的事件管理者 Jill,以及 Fourth Coffee Shop 的客户 Susan。
最终用户 SaaS 客户管理员、 SaaS 客户用户或引入的任何其他用户类型。 这是一个通用术语,用于描述登录应用程序的用户。 Joe、Jill 和 Susan 都是最终用户(从 ISV 的角度讲)。
前端应用程序 任何前端应用程序。 载入并管理应用以及 SaaS 应用程序都是前端应用程序。

工作流程

  1. SaaS 客户管理员导航到载入和管理员应用上托管的网站。

  2. SaaS 客户管理员使用用户登录工作流登录

  3. SaaS 客户管理员完成载入流

  4. SaaS 客户管理员导航到载入和管理应用上的租户管理员区域,并将 SaaS 客户用户添加到新创建的租户。

  5. SaaS 客户用户导航到 SaaS 应用程序应用并使用 SaaS 应用程序。

用户登录

用户登录工作流包括以下步骤:

显示用户的登录过程的序列图。

  1. 最终用户导航到前端应用程序并选择“登录”按钮。

  2. 前端应用程序最终用户重定向到标识提供者托管的登录页。

  3. 最终用户输入帐户信息,并将登录表单提交到标识提供者

  4. 标识提供者使用最终用户的电子邮件地址和对象 ID 发出 POST 请求,以检索其权限和角色。

  5. 权限数据 API权限数据存储中查找最终用户的信息,并返回分配给该最终用户的权限和角色的列表。

  6. 标识提供者将权限和角色作为自定义声明添加到 ID 令牌,即 JSON Web 令牌(JWT)。

  7. 标识提供者最终用户返回 ID 令牌,并启动到前端应用程序的重定向。

  8. 最终用户将重定向到前端应用程序中的登录终结点,并显示 ID 令牌。

  9. 前端应用程序验证提供的 ID 令牌。

  10. 前端应用程序返回成功的登录页,最终用户现在已登录。

有关此登录流的工作原理的详细信息,请参阅 OpenID Connect 协议

加入新租户

租户加入工作流包括以下步骤:

显示租户载入过程的序列图。

  1. SaaS 客户管理员导航到载入和管理员应用并完成注册表单。

  2. 载入和管理应用租户数据 API 发出 POST 请求以创建新租户。

  3. 租户数据 API 在租户数据存储中创建一个新租户。

  4. 租户数据 API权限数据 API 发出 POST 请求,向新创建的租户授予 SaaS 客户管理员权限。

  5. 权限数据 API权限数据存储中创建新的权限记录。

  6. 权限数据 API 成功返回。

  7. 租户数据 API 成功返回。

  8. 载入和管理应用电子邮件通知提供商发出 POST 请求,以向 SaaS 客户管理员发送“租户已创建”电子邮件。

  9. 电子邮件通知提供程序发送电子邮件。

  10. 电子邮件通知提供程序成功返回。

  11. 载入和管理员应用标识提供者发出请求以刷新 SaaS 客户管理员的 ID 令牌,以便它将 JWT 声明包含在新创建的租户。

  12. 标识提供者SaaS 客户管理员的电子邮件地址和对象 ID 发出 POST 请求,以检索其权限和角色。

  13. 权限数据 API权限数据存储中查找 SaaS 客户管理员的信息,并返回分配给 SaaS 客户管理员的权限和角色列表。

  14. 标识提供者将权限和角色作为自定义声明添加到 ID 令牌。

  15. 标识提供者将 ID 令牌返回到载入和管理应用

  16. 载入和管理应用SaaS 客户管理员返回一条成功消息和新 ID 令牌。

将用户添加到租户

将用户添加到租户的工作流包括以下步骤:

显示将新用户添加到租户的序列图。

  1. SaaS 客户管理员请求从载入和管理员应用上的租户管理区域查看租户列表。

  2. 载入和管理应用租户数据 API 发出 GET 请求,以获取 SaaS 客户管理员的租户列表。

  3. 租户数据 API权限数据 API 发出 GET 请求,以获取 SaaS 客户管理员有权查看的租户列表。

  4. 权限数据 API 返回租户权限列表。

  5. 租户数据 API 在租户数据存储中查找租户信息,并根据收到的租户权限列表返回租户数据列表。

  6. 载入和管理应用将租户数据列表返回到 SaaS 客户管理员

  7. SaaS 客户管理员从列表中选择一个租户,以向 SaaS 客户用户添加 SaaS 客户用户,并输入 SaaS 客户用户的电子邮件地址。

  8. 载入和管理应用租户数据 API 发出 POST 请求,以在指定租户上为 SaaS 客户用户添加权限。

  9. 租户数据 API 验证 SaaS 客户管理员是否对指定租户具有有效的 JWT 声明,并具有用户对此的写入权限。

  10. 租户数据 API权限数据 API 发出 POST 请求,为指定租户上的 SaaS 客户用户添加权限。

  11. 权限数据 API标识提供者发出 GET 请求,以便通过提供的电子邮件地址查找 SaaS 客户用户

  12. 标识提供者返回 SaaS 客户用户的对象 ID。

  13. 权限数据 API 使用其对象 ID 在指定租户上的 SaaS 客户用户的权限数据存储中添加权限记录。

  14. 权限数据 API 成功返回。

  15. 租户数据 API 成功返回。

  16. 载入和管理应用成功返回。

组件

此体系结构使用以下 Azure 服务:

  • 应用服务 使你能够使用所选编程语言生成和托管 Web 应用和 API 应用,而无需管理基础结构。

  • Azure Active Directory B2C 可以轻松为最终用户应用程序启用标识和访问管理。

  • Azure SQL 数据库 是一种常规用途的关系数据库托管服务,支持关系数据、空间数据、JSON 和 XML。

  • 借助 Azure 逻辑应用 ,可以使用简单的图形用户界面(GUI)工具快速构建强大的集成。

备选方法

任何替代选择的有效性都在很大程度上取决于你希望 SaaS 应用程序支持的 租赁模型 。 下面是在实现此解决方案时可以遵循的一些替代方法示例:

  • 当前解决方案使用 Azure Active Directory B2C 作为标识提供者。 可以改用其他标识提供者,例如 Microsoft Entra ID

  • 若要满足更严格的安全性和合规性要求,可以选择为跨服务通信实现专用网络。

  • 可以实现跨服务消息传送 的事件驱动体系结构样式 ,而不是在服务之间使用 REST 调用。

注意事项

这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改进工作负荷质量的指导原则。 有关详细信息,请参阅 Well-Architected Framework

安全性

安全性提供针对故意攻击和滥用宝贵数据和系统的保证。 有关详细信息,请参阅 安全设计评审清单

此解决方案依赖于使用标识作为其安全范式。 Web 应用和 API 的身份验证和授权由 Microsoft标识平台管理,该平台负责颁发和验证用户 ID 令牌(JWT)。

成本优化

成本优化侧重于减少不必要的开支和提高运营效率的方法。 有关详细信息,请参阅 成本优化的设计评审清单

操作此解决方案中的组件会产生相关的成本,但对于大多数 Web 应用程序和 SaaS 解决方案而言,该成本并不算高。 此外,可以通过管理以下资源设置来控制成本:

  • 可以扩展运行应用程序的应用服务计划,以满足所需的吞吐量。 此外,如果需要更高的吞吐量,可以在单独的计划中运行每个应用,但这会产生更高的成本。 有关详细信息,请参阅 Azure 应用服务计划概述

  • Azure AD B2C 提供两个 SKU:Premium P1 和 Premium P2。 这两个 SKU 都根据每月活跃用户数 (MAU) 提供免费额度,但你需要评估每个 SKU 提供的功能,以确定你的用例需要使用哪个 SKU。 有关详细信息,请参阅 Microsoft Entra 外部 ID 定价

  • Azure SQL 提供多种购买模型来满足各种用例的需求,包括自动缩放的功能。 你需要评估自己数据库的使用情况,以确保正确调整其大小。 有关详细信息,请参阅 比较 Azure SQL 数据库的 vCore 和基于 DTU 的购买模型

性能效率

性能效率是指工作负荷能够高效地缩放以满足用户需求。 有关详细信息,请参阅 性能效率的设计评审清单

此体系结构应该能够缩放,以轻松满足大多数中型到中大型工作负荷的需求。 由于该体系结构主要使用 Azure 平台(平台即服务 (PaaS))服务,因此有很多选择都可以根据需求和负载来调整解决方案的规模。

部署此方案

若要部署此方案,请参阅 GitHub 上的 Azure SaaS 开发工具包 。 这是此体系结构的可部署参考实现。

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

其他参与者:

后续步骤

下面是有关在 Azure 上构建 SaaS 应用程序的一些附加建议资源: