将 AD FS 颁发的 SAML 令牌换成 Microsoft Graph 访问令牌

要在使用 Active Directory 联合身份验证服务 (AD FS) 颁发的 SAML 令牌并且还需要访问 Microsoft Graph 的应用程序中启用单一登录 (SSO),请按照本文中的步骤操作。

你将启用 SAML 持有者断言流,以便将联合 AD FS 实例颁发的 SAMLv1 令牌换成 Microsoft Graph 的 OAuth 2.0 访问令牌。 将用户的浏览器重定向到 Microsoft Entra ID 以便对用户进行身份验证时,浏览器将从 SAML 登录中拾取会话,而不会要求用户输入其凭据。

重要

仅当 AD FS 是颁发原始 SAMLv1 令牌的联合标识提供者时,此方案才有效。 不能将 Microsoft Entra ID 颁发的 SAMLv2 令牌交换成 Microsoft Graph 访问令牌。

先决条件

方案概述

当客户端需要使用现有的信任关系时,你可以通过 OAuth 2.0 SAML 持有者断言流使用 SAML 断言请求 OAuth 访问令牌。 应用于 SAML 断言的签名提供已授权应用的身份验证。 SAML 断言是标识提供者颁发的 XML 安全令牌,由服务提供者使用。 出于安全相关的目的,该服务提供者依赖于其内容来识别断言的使用者。

SAML 断言将发布到 OAuth 令牌终结点。 该终结点根据应用的先前审批状态处理断言并颁发访问令牌。 客户端不需要具有或存储刷新令牌,也不需要将客户端密码传递给令牌终结点。

OAuth flow

使用 Microsoft Entra ID 注册应用程序

首先在门户中注册应用程序:

  1. 登录到门户的应用注册页(请注意,我们将对图形 API 使用 v2.0 终结点,因此需要在 Microsoft Entra 管理中心注册应用程序。否则可以使用 Microsoft Entra ID 中的注册)。
  2. 选择“新注册”。
  3. 出现“注册应用程序”页后,请输入应用程序的注册信息:
    1. 名称:输入一个会显示给应用用户的有意义的应用程序名称。
    2. 支持的帐户类型 - 选择希望应用程序支持的帐户。
    3. 重定向 URI (可选) - 选择要生成的应用的类型:“Web”或“公共客户端(移动和桌面)”,然后输入应用程序的重定向 URI (或回复 URL)。
    4. 完成后,选择“注册”。
  4. 请记下应用程序(客户端)ID。
  5. 在左窗格中,选择“证书和密码”。 在“客户端密码”部分中,单击“新建客户端密码” 。 复制新客户端密码,在离开页面后,将无法进行检索。
  6. 在左窗格中,选择“API 权限”,然后选择“添加权限”。 依次选择“Microsoft Graph”、“委托的权限”和“Tasks.read”,因为我们打算使用 Outlook 图形 API。

从 AD FS 获取 SAML 断言

使用 SOAP 信封创建发送给 AD FS 终结点的 POST 请求,以提取 SAML 断言:

Get SAML assertion

标头值:

Header values

AD FS 请求正文:

AD FS request body

成功发布此请求后,应会收到来自 AD FS 的 SAML 断言。 只需提供 SAML:Assertion 标记数据,请将其转换为 base64 编码,以便在后续请求中使用。

使用 SAML 断言获取 OAuth 2.0 令牌

使用 AD FS 断言响应提取 OAuth 2.0 令牌。

  1. 按如下所示创建包含标头值的 POST 请求:

    POST request

  2. 在请求的正文中,替换 client_id、client_secret和 assertion (在上一步骤中获取的 base64 编码 SAML 断言):

    Request body

  3. 请求成功后,你将收到来自 Microsoft Entra ID 的访问令牌。

使用 OAuth 2.0 令牌获取数据

收到访问令牌后,调用图形 API(在此示例中为 Outlook 任务)。

  1. 使用上一步骤中提取的访问令牌创建 GET 请求:

    GET request

  2. 成功发出请求后,将收到 JSON 响应。

后续步骤

有关应用注册和身份验证流的详细信息,请参阅: