将 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 访问令牌。
先决条件
- AD FS 联合,作为单一登录的标识提供者;有关示例,请参阅设置 AD FS 并启用对 Office 365 的单一登录。
- Postman,用于测试请求。
方案概述
当客户端需要使用现有的信任关系时,你可以通过 OAuth 2.0 SAML 持有者断言流使用 SAML 断言请求 OAuth 访问令牌。 应用于 SAML 断言的签名提供已授权应用的身份验证。 SAML 断言是标识提供者颁发的 XML 安全令牌,由服务提供者使用。 出于安全相关的目的,该服务提供者依赖于其内容来识别断言的使用者。
SAML 断言将发布到 OAuth 令牌终结点。 该终结点根据应用的先前审批状态处理断言并颁发访问令牌。 客户端不需要具有或存储刷新令牌,也不需要将客户端密码传递给令牌终结点。
使用 Microsoft Entra ID 注册应用程序
首先在门户中注册应用程序:
- 登录到门户的应用注册页(请注意,我们将对图形 API 使用 v2.0 终结点,因此需要在 Microsoft Entra 管理中心注册应用程序。否则可以使用 Microsoft Entra ID 中的注册)。
- 选择“新注册”。
- 出现“注册应用程序”页后,请输入应用程序的注册信息:
- 名称:输入一个会显示给应用用户的有意义的应用程序名称。
- 支持的帐户类型 - 选择希望应用程序支持的帐户。
- 重定向 URI (可选) - 选择要生成的应用的类型:“Web”或“公共客户端(移动和桌面)”,然后输入应用程序的重定向 URI (或回复 URL)。
- 完成后,选择“注册”。
- 请记下应用程序(客户端)ID。
- 在左窗格中,选择“证书和密码”。 在“客户端密码”部分中,单击“新建客户端密码” 。 复制新客户端密码,在离开页面后,将无法进行检索。
- 在左窗格中,选择“API 权限”,然后选择“添加权限”。 依次选择“Microsoft Graph”、“委托的权限”和“Tasks.read”,因为我们打算使用 Outlook 图形 API。
从 AD FS 获取 SAML 断言
使用 SOAP 信封创建发送给 AD FS 终结点的 POST 请求,以提取 SAML 断言:
标头值:
AD FS 请求正文:
成功发布此请求后,应会收到来自 AD FS 的 SAML 断言。 只需提供 SAML:Assertion 标记数据,请将其转换为 base64 编码,以便在后续请求中使用。
使用 SAML 断言获取 OAuth 2.0 令牌
使用 AD FS 断言响应提取 OAuth 2.0 令牌。
按如下所示创建包含标头值的 POST 请求:
在请求的正文中,替换 client_id、client_secret和 assertion (在上一步骤中获取的 base64 编码 SAML 断言):
请求成功后,你将收到来自 Microsoft Entra ID 的访问令牌。
使用 OAuth 2.0 令牌获取数据
收到访问令牌后,调用图形 API(在此示例中为 Outlook 任务)。
使用上一步骤中提取的访问令牌创建 GET 请求:
成功发出请求后,将收到 JSON 响应。
后续步骤
有关应用注册和身份验证流的详细信息,请参阅: