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

适用于 Azure API for FHIR 的 Azure Active Directory 标识配置

使用医疗保健数据时,确保数据安全并且不能由未经授权的用户或应用程序访问,这一点非常重要。 FHIR 服务器使用 OAuth 2.0 确保此数据的安全性。 Azure API for FHIR 使用 Azure Active Directory 进行保护,这是 OAuth 2.0 标识提供者的一个示例。 本文概述了 FHIR 服务器授权以及获取令牌以访问 FHIR 服务器所需的步骤。 尽管这些步骤适用于任何 FHIR 服务器和任何标识提供者,但本文会演练将 Azure API for FHIR 作为 FHIR 服务器,将 Azure Active Directory (Azure AD) 作为标识提供者。

访问控制概述

为了让客户端应用程序能够访问 Azure API for FHIR,它必须提供一个访问令牌。 访问令牌是经过签名的 Base64 编码的属性(声明)集合,可在其中了解客户端标识和角色以及授予客户端的权限。

有多种方法可以获取令牌,但 Azure API for FHIR 不考虑令牌的获取方式,只要该令牌是具有正确声明的正确签名令牌即可。

例如,使用 授权代码流时,访问 FHIR 服务器需要执行以下四个步骤:

FHIR 授权

  1. 客户端向 Azure AD 的 /authorize 终结点发送一个请求。 Azure AD 会将客户端重定向到登录页面,用户将在其中使用相应的凭据(例如,用户名和密码或双因素身份验证)进行身份验证。 有关详细信息,请参阅获取授权代码。 成功完成身份验证后,授权代码将返回到客户端。 Azure AD 仅允许将此授权代码返回到客户端应用程序注册中配置的已注册回复 URL。
  2. 在 Azure AD 的 /token 终结点上,客户端应用程序会使用授权代码交换访问令牌。 请求令牌时,客户端应用程序可能必须提供客户端密码 (应用程序密码) 。 有关详细信息,请参阅获取访问令牌
  3. 例如,客户端向 Azure API for FHIR GET /Patient发出请求,以搜索所有患者。 当客户端发出请求时,它将访问令牌包含在 HTTP 请求标头中,例如 Authorization: Bearer eyJ0e...,其中 eyJ0e... 表示 Base64 编码的访问令牌。
  4. Azure API for FHIR 验证令牌是否包含令牌) 中的相应声明 (属性。 如果所有内容符合要求,则 Azure API for FHIR 将完成请求,并将包含结果的 FHIR 捆绑包返回给客户端。

请务必注意,Azure API for FHIR 不参与验证用户凭据,也不会颁发令牌。 身份验证和令牌创建由 Azure AD 来完成。 Azure API for FHIR 只需验证令牌是否已正确签名, (令牌是真实的) ,并且具有适当的声明。

访问令牌的结构

开发快速医疗保健互操作性资源 (FHIR®) 应用程序通常涉及调试访问问题。 如果拒绝客户端访问 Azure API for FHIR,了解访问令牌的结构以及如何对其进行解码以检查令牌的声明 (令牌) 的内容非常有用。

FHIR 服务器通常需要 JSON Web 令牌(JWT,有时发音为“jot”)。 它由三个部分组成:

第 1 部分:标头,例如:

    {
      "alg": "HS256",
      "typ": "JWT"
    }

第 2 部分:有效负载(声明),例如:

    {
     "oid": "123",
     "iss": "https://issuerurl",
     "iat": 1422779638,
     "roles": [
        "admin"
      ]
    }

第 3 部分:签名,它是通过串联标头和有效负载的 Base64 编码内容并根据标头中指定的算法 (alg) 计算这些内容的加密哈希这一方法计算得出的。 服务器将能够从标识提供者获取公钥,并验证此令牌是否由特定的标识提供者颁发且未被篡改。

完整的令牌由这三段的 Base64 编码(实际上是 Base64 URL 编码)的版本组成。 这三段串联起来并以“.”(点)进行分隔。

令牌的示例如下所示:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvaWQiOiIxMjMiLCAiaXNzIjoiaHR0cHM6Ly9pc3N1ZXJ1cmwiLCJpYXQiOjE0MjI3Nzk2MzgsInJvbGVzIjpbImFkbWluIl19.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI

可以通过工具(如 https://jwt.ms)对令牌进行解码和检查。 令牌解码的结果是:

{
  "alg": "HS256",
  "typ": "JWT"
}.{
  "oid": "123",
  "iss": "https://issuerurl",
  "iat": 1422779638,
  "roles": [
    "admin"
  ]
}.[Signature]

获取访问令牌

如前所述,可通过多种方式从 Azure AD 获取令牌。 Azure AD 开发人员文档中对此进行了详细介绍。

使用以下任一身份验证协议:

(还有其他变体,例如,由于用于获取令牌的流) 。 有关详细信息,请参阅 Azure AD 文档 。 使用 Azure API for FHIR 时,可以使用一些快捷方式获取访问令牌 (例如用于调试目的) 使用 Azure CLI

后续步骤

本文档介绍了在使用 Azure AD 保护对 Azure API for FHIR 的访问时涉及的一些基本概念。 有关如何部署 Azure API for FHIR 服务的信息,请参阅

FHIR® 是 HL7 的注册商标,经 HL7 许可使用。