Compartir a través de


Configuración de identidad de Azure Active Directory para Azure API for FHIR

Al trabajar con datos del sector sanitario, es importante asegurarse de que estén protegidos y de que los usuarios o las aplicaciones no autorizados no puedan acceder a ellos. Los servidores de FHIR usan OAuth 2.0 para garantizar esta seguridad de datos. Azure API for FHIR se protege mediante Azure Active Directory, que es un ejemplo de un proveedor de identidades de OAuth 2.0. En este artículo se proporciona información general sobre la autorización de un servidor de FHIR y los pasos necesarios para obtener un token para acceder a dicho servidor. Aunque estos pasos se aplican a cualquier servidor de FHIR y a cualquier proveedor de identidades, en este artículo se le guía por Azure API for FHIR como servidor de FHIR y Azure Active Directory (Azure AD) como proveedor de identidades.

Introducción al control de acceso

Para que una aplicación cliente acceda a Azure API for FHIR, debe presentar un token de acceso. El token de acceso es una colección de propiedades (notificaciones) codificada Base64 y firmada que proporcionan información sobre la identidad del cliente y los roles y privilegios que se conceden a este.

Hay muchas maneras de obtener un token, pero a Azure API for FHIR no le importa cómo se haga, siempre que sea un token adecuadamente firmado con las notificaciones correctas.

Por ejemplo, al usar el flujo de código de autorización, el acceso a un servidor FHIR pasa por los cuatro pasos siguientes:

Authorization de FHIR

  1. El cliente envía una solicitud al punto de conexión /authorize de Azure AD. Azure AD redirigirá al cliente a una página de inicio de sesión donde el usuario se autenticará mediante las credenciales apropiadas (por ejemplo, el nombre de usuario y la contraseña o la autenticación en dos fases). Vea los detalles sobre la obtención de un código de autorización. Después de que la autenticación se haya realizado correctamente, se devuelve un código de autorización al cliente. Azure AD solo permitirá que este código de autorización se devuelva a una dirección URL de respuesta registrada configurada en el registro de la aplicación cliente.
  2. La aplicación cliente intercambia el código de autorización para un token de acceso en el punto de conexión /token de Azure AD. Al solicitar un token, es posible que la aplicación cliente tenga que proporcionar un secreto de cliente (la contraseña de las aplicaciones). Consulte los detalles sobre la obtención de un token de acceso.
  3. El cliente realiza una solicitud a Azure API for FHIR, por ejemplo GET /Patient, para buscar a todos los pacientes. Cuando el cliente realiza la solicitud, incluye el token de acceso en un encabezado de solicitud HTTP, por ejemplo Authorization: Bearer eyJ0e..., donde eyJ0e... representa el token de acceso codificado en Base64.
  4. Azure API for FHIR valida que el token contiene las notificaciones adecuadas (propiedades del token). Si todo concuerda, se completará la solicitud y se devolverá un conjunto de FHIR con los resultados al cliente.

Es importante tener en cuenta que Azure API for FHIR no está implicado en la validación de credenciales de usuario y no emite el token. Azure AD lleva a cabo la autenticación y la creación del token. Azure API for FHIR simplemente valida que el token está firmado correctamente (es auténtico) y que tiene las notificaciones adecuadas.

Estructura de un token de acceso

El desarrollo de aplicaciones fast Healthcare Interoperability Resources (FHIR®) a menudo implica depurar problemas de acceso. Si se deniega el acceso de un cliente a Azure API for FHIR, es útil comprender la estructura del token de acceso y cómo se puede descodificar para inspeccionar el contenido (las notificaciones) del token.

Normalmente, los servidores de FHIR esperan un método JSON Web Token (JWT, a veces pronunciado "jot"). Consta de tres partes:

Parte 1: un encabezado, que podría tener este aspecto:

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

Parte 2: la carga (las notificaciones), por ejemplo:

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

Parte 3: una firma, que se calcula concatenando el contenido con codificación Base 64 del encabezado y la carga, y calculando un hash criptográfico de ellos en función del algoritmo (alg) especificado en el encabezado. Un servidor podrá obtener claves públicas del proveedor de identidades y validar que este token lo emitió un proveedor de identidades específico y no se ha manipulado.

El token completo consta de las versiones con codificación Base64 (realmente codificadas en URL como Base64) de esos tres segmentos. Los tres segmentos se concatenan y se separan con . (punto).

Un ejemplo de un token se muestra como:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvaWQiOiIxMjMiLCAiaXNzIjoiaHR0cHM6Ly9pc3N1ZXJ1cmwiLCJpYXQiOjE0MjI3Nzk2MzgsInJvbGVzIjpbImFkbWluIl19.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI

El token se puede descodificar e inspeccionar con herramientas como https://jwt.ms. El resultado de descodificar el token es:

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

Obtención de un token de acceso

Como se mencionó, hay varias maneras de obtener un token de Azure AD. Se describen en detalle en la documentación para desarrolladores de Azure AD.

Use cualquiera de los siguientes protocolos de autenticación:

Hay otras variaciones (por ejemplo, debido al flujo) para obtener un token. Consulte la documentación de Azure AD para más información. Cuando se usa Azure API for FHIR, hay algunos accesos directos para obtener un token de acceso (por ejemplo, con fines de depuración) mediante la CLI de Azure.

Pasos siguientes

En este documento, aprendió algunos de los conceptos básicos implicados en la protección del acceso a Azure API for FHIR mediante Azure AD. Para más información sobre cómo implementar el servicio Azure API for FHIR, consulte

FHIR® es una marca registrada de HL7 y se usa con su permiso.