在商业市场中为可交易的 SaaS 产品/服务构建登陆页

本文指导你完成为将在Microsoft商业市场销售的可交易 SaaS 应用构建登陆页面的过程。

重要说明

自 2023 年 6 月 30 日起,Azure Active Directory (Azure AD) Graph 将弃用。 此后,我们不会在 Azure AD Graph 中进行进一步的投资。 除了与安全相关的修补程序之外,Azure AD Graph API 不提供 SLA 或维护承诺。 对新特性和功能的投资只能在 Microsoft Graph 中进行。

我们将以增量方式逐步停用 Azure AD Graph,以便你有足够的时间将应用程序迁移到 Microsoft Graph API。 稍后我们将宣布,我们将阻止使用 Azure AD Graph 创建任何新应用程序。

若要了解详细信息,请参阅重要说明:Azure AD Graph 停用和 PowerShell 模块弃用

概述

可以将登陆页视为软件即服务(SaaS)产品/服务的“大厅”。 购买者订阅产品/服务后,商业市场会将其定向到登陆页面以激活并配置其 SaaS 应用程序的订阅。 将此视为订单确认步骤,让买家查看已购买的内容并确认其帐户详细信息。 使用 Microsoft Entra ID 和 Microsoft Graph,将为买家启用单一登录(SSO),并获取可用于确认和激活其订阅(包括其姓名、电子邮件地址和组织)的购买者的重要详细信息。

由于激活订阅所需的信息有限,并且由 Microsoft Entra ID 和 Microsoft Graph 提供,因此无需请求需要比基本同意更多的信息。 如果需要需要应用程序附加同意的用户详细信息,应在订阅激活完成后请求此信息。 这为购买者提供了无摩擦的订阅激活,并降低了放弃的风险。

登陆页面通常包括以下内容:

  • 显示购买的产品/服务和计划的名称,以及计费条款。
  • 显示买家的帐户详细信息,包括名字和姓氏、组织和电子邮件。
  • 提示买家确认或替换不同的帐户详细信息。
  • 在激活后引导买家执行后续步骤。 例如,收到欢迎电子邮件、管理订阅、获取支持或阅读文档。

注释

激活后在管理订阅时,买家还将被引导至登录页面。 激活买家的订阅后,必须使用 SSO 使用户能够登录。 建议将用户引导至账户资料或配置页面。

以下部分将指导你完成生成登陆页面的过程:

  1. 为登陆页创建 Microsoft Entra 应用注册
  2. 使用代码示例作为应用的起点
  3. 使用两个 Microsoft Entra 应用在生产中提高安全性
  4. 解析市场购买标识令牌(由商业市场添加到 URL)。
  5. 从 ID 令牌中编码的声明读取信息,该令牌是登录后从 Microsoft Entra ID 接收的,与请求一起发送。
  6. 根据需要使用 Microsoft 图形 API 收集其他信息。

创建 Microsoft Entra 应用注册

商业市场与 Microsoft Entra ID 完全集成。 买家到达市场时,使用 Microsoft Entra 帐户或 Microsoft 帐户(MSA)进行身份验证。 购买后,买家会从商业市场转到登陆页面 URL,以激活和管理其 SaaS 应用程序的订阅。 必须让买家使用 Microsoft Entra SSO 登录到应用程序。 (登陆页面 URL 是在产品/服务的 技术配置 页中指定的。

小贴士

不要在登陆页 URL 中包含井号字符 (#)。 否则,客户将无法访问登陆页面。

使用身份验证的第一步是确保登录页面注册为 Microsoft Entra 应用程序。 通过注册应用程序,可以使用 Microsoft Entra ID 对用户进行身份验证并请求访问用户资源。 可以将其视为应用程序的定义,这样服务就可以了解如何根据应用的设置向应用颁发令牌。

使用 Azure 门户注册新应用程序

若要开始,请按照 注册新应用程序的说明进行操作。 若要让其他公司的用户访问该应用,当被问及谁可以使用该应用程序时,必须选择一个多租户选项。

如果要查询 Microsoft Graph API,请配置新应用程序以访问 Web API。 选择此应用程序的 API 权限时,User.Read 的默认值足以收集有关购买者的基本信息,以使载入过程流畅且自动。 请勿请求标记为 的任何 API 权限需要管理员同意,因为这将阻止所有非管理员用户访问登陆页面。

如果在员工入职或预配过程中需要提升权限,建议使用 Microsoft Entra ID 的 增量同意 功能,以便从市场发送来的所有买家能够首先与登陆页面进行交互。

使用代码示例作为起点

我们提供了几个示例应用,这些应用实现了启用了 Microsoft Entra 登录的简单网站。 在 Microsoft Entra ID 中注册应用程序后,快速入门 边栏选项卡提供了常见应用程序类型和开发堆栈的列表,如图 1 所示。 选择与您的环境匹配的选项,并按照说明下载并设置。

图 1:Azure 门户中的“快速入门”边栏选项卡

演示 Azure 门户中的“快速入门”边栏选项卡。

下载代码并设置开发环境后,更改应用中的配置设置以反映你在上一过程中记录的应用程序 ID、租户 ID 和客户端密码。 请注意,具体步骤因所使用的示例而异。

使用两个Microsoft Entra 应用来提高生产的安全性

本文提供了一个简化的体系结构版本,用于为商业市场 SaaS 产品/服务实现登陆页面。 在生产环境中运行页面时,我们建议你仅通过其他受保护的应用程序与 SaaS 履行 API 通信来提高安全性。 这需要创建两个新应用程序:

  • 首先,到目前为止所述的多租户登陆页应用程序,除了没有联系 SaaS 履行 API 的功能。 此功能将卸载到另一个应用程序,如下所示。
  • 其次,一个应用程序,用于管理与 SaaS 实现 API 的通信。 此应用程序应为单租户,仅供组织使用,并且可以建立访问控制列表,以仅限制对此应用的 API 的访问。

这样,解决方案就可以在遵循关注点分离原则的情况下正常使用。 例如,登录页使用第一个注册的 Microsoft Entra 应用来登录用户。 用户登录后,登陆页将使用第二个 Microsoft Entra ID 请求访问令牌以调用 SaaS 履行 API,并调用解析操作。

解析市场购买标识令牌

当买家被送至您的着陆页时,令牌会被添加到 URL 参数中。 此令牌与 Microsoft Entra ID 颁发的令牌以及用于服务到服务身份验证的访问令牌不同,它被用作 SaaS 履行 API 中解析调用的输入,以获取订阅详情。 与所有对 SaaS 履行 API 的调用一样,你的服务到服务请求将通过一个基于应用的 Microsoft Entra 应用程序 ID 用户的访问令牌来进行身份验证,以实现服务到服务的身份验证。

注释

在大多数情况下,最好从第二个单租户应用程序进行此调用。 请参阅本文前面的 :使用两个 Microsoft Entra 应用来提高生产的安全性

请求访问令牌

若要使用 SaaS 履行 API 对应用程序进行身份验证,需要一个访问令牌,该令牌可以通过调用 Microsoft Entra ID OAuth 终结点生成。 请参阅 如何获取发布者的授权令牌

调用解析终结点

SaaS 履行 API 会实现解析终结点,可以调用该终结点以确认市场令牌的有效性,并返回有关订阅的信息。

从 ID 令牌中编码的声明读取信息

作为 OpenID Connect 流的一部分,请将收到的租户 ID 值置于 https://login.microsoftonline.com/{tenant}/v2.0中。 Microsoft Entra ID 会在将买家发送到登陆页时向请求添加一个 ID 令牌。 此令牌包含多个可在激活过程中有用的基本信息,包括此表中显示的信息。

描述
aud 此标记的目标受众。 在这种情况下,它应与您的应用 ID 匹配并进行验证。
preferred_username 访问用户的主要用户名。 这可能是电子邮件地址、电话号码或其他标识符。
email 用户的电子邮件地址。 请注意,此字段可能为空。
name 人类可读的值,用于标识令牌的主体。 在这种情况下,它将是买家的姓名。
oid Microsoft标识系统中唯一标识跨应用程序的用户的标识符。 Microsoft Graph 将返回此值作为给定用户帐户的 ID 属性。
tid 标识符用于表示买家所属的 Microsoft Entra 租户。 对于 MSA 标识,这将始终是 9188040d-6c67-4c5b-b112-36a304b66dad。 有关详细信息,请参阅下一部分中的说明:使用 Microsoft 图形 API。
sub 唯一标识此特定应用程序中的用户的标识符。

使用 Microsoft Graph API

ID 令牌包含用于标识买家的基本信息,但激活过程可能需要其他详细信息(如买家的公司)来完成载入过程。 使用 Microsoft图形 API 请求此信息,以避免强制用户再次输入这些详细信息。 默认情况下,标准 User.Read 权限包括以下信息。

描述
displayName 用户显示在通讯簿中的名称。
givenName 用户的名字。
jobTitle 用户的职务。
mail 用户的 SMTP 地址。
mobilePhone 用户的主要移动电话电话号码。
preferredLanguage 用户首选语言的 ISO 639-1 代码。
surname 用户的姓氏。

可以选择其他属性(例如用户公司的名称或用户的位置(国家/地区)以包含在请求中。 有关更多详细信息,请参阅 用户资源类型的 属性。

注册到 Microsoft Entra ID 的大多数应用都授予委派权限,以从公司Microsoft Entra 租户中读取用户的信息。 针对该信息的任何 Microsoft Graph 请求都必须附带用于身份验证的访问令牌。 生成访问令牌的具体步骤将取决于所使用的技术堆栈,但示例代码将包含一个示例。 有关详细信息,请参阅代表用户获取访问权限

注释

MSA 租户中的帐户(具有租户 ID 9188040d-6c67-4c5b-b112-36a304b66dad)不会返回已使用 ID 令牌收集的更多信息。 因此,可以跳过对这些帐户的图形 API 的调用。

视频教程

  • 在 .NET 中生成简单的 SaaS 登陆页面