为商业市场中的可交易 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 Graph 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 进行访问的用户的主用户名。 可以是电子邮件地址、电话号码或其他标识符。
电子邮件 用户的电子邮件地址。 请注意,此字段可能为空。
name 用户可读值,用于标识令牌使用者。 在本例中,它是买家的姓名。
oid Microsoft 标识系统中的标识符,用于在不同的应用程序中唯一标识用户。 Microsoft Graph 将返回此值作为给定用户帐户的 ID 属性。
tid 表示买家来自的 Microsoft Entra 租户的标识符。 对于 MSA 标识,此值始终为 9188040d-6c67-4c5b-b112-36a304b66dad。 有关详细信息,请参阅下一部分“使用 Microsoft Graph API”中的说明。
sub 唯一标识此特定应用程序中的用户的标识符。

使用 Microsoft Graph API

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

Description
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 令牌收集的信息。 因此你可以跳过对这些帐户进行的 Graph API 调用。

后续步骤

视频教程