Конфигурация удостоверений Azure Active Directory для Azure API для FHIR
При работе с медицинскими данными важно обеспечить безопасность данных и доступ к ним неавторизованных пользователей или приложений. Серверы FHIR используют OAuth 2.0 для обеспечения безопасности данных. Azure API для FHIR защищен с помощью Azure Active Directory, который является примером поставщика удостоверений OAuth 2.0. В этой статье представлен обзор авторизации сервера FHIR и действия, необходимые для получения маркера для доступа к серверу FHIR. Хотя эти действия применимы к любому серверу FHIR и любому поставщику удостоверений, в этой статье мы рассмотрим Azure API для FHIR в качестве сервера FHIR и Azure Active Directory (Azure AD) в качестве поставщика удостоверений.
Общие сведения о контроле доступа
Чтобы клиентское приложение получите доступ к Api Azure для FHIR, оно должно предоставить маркер доступа. Маркер доступа — это подписанная в кодировке Base64 коллекция свойств (утверждений), которые передают сведения об удостоверении клиента, ролях и привилегиях, предоставленных клиенту.
Существует множество способов получения маркера, но API Azure для FHIR не заботится о том, как он будет получен, если он является надлежащим образом подписанным маркером с правильными утверждениями.
Например, при использовании потока кода авторизации доступ к серверу FHIR выполняет следующие четыре этапа:
- Клиент отправляет запрос к конечной точке
/authorize
Azure AD. Azure AD перенаправит клиент на страницу входа, где пользователь будет проходить проверку подлинности, используя соответствующие учетные данные (например, имя пользователя и пароль или двухфакторную проверку подлинности). См. сведения о получении кода авторизации. После успешной проверки подлинности клиенту возвращается код авторизации . Azure AD позволит возвращать этот код авторизации только на зарегистрированный URL-адрес ответа, настроенный при регистрации клиентского приложения. - Клиентское приложение обменивается кодом авторизации на маркер доступа в конечной точке
/token
Azure AD. При запросе маркера клиентскому приложению может потребоваться предоставить секрет клиента (пароль приложения). См. сведения о получении маркера доступа. - Клиент отправляет запрос к Api Azure для FHIR, например
GET /Patient
, для поиска всех пациентов. Когда клиент выполняет запрос, он включает маркер доступа в заголовок HTTP-запроса, напримерAuthorization: Bearer eyJ0e...
, гдеeyJ0e...
представляет маркер доступа в кодировке Base64. - Api Azure для FHIR проверяет, содержит ли маркер соответствующие утверждения (свойства в маркере). Если все будет извлечено, он завершит запрос и вернет клиенту пакет FHIR с результатами.
Важно отметить, что API Azure для FHIR не участвует в проверке учетных данных пользователя и не выдает маркер. Проверка подлинности и создание маркера выполняются Azure AD. Api Azure для FHIR просто проверяет правильность подписи маркера (он является подлинным) и наличие соответствующих утверждений.
Структура маркера доступа
Разработка приложений ресурсов быстрого взаимодействия в сфере здравоохранения (FHIR®) часто включает отладку проблем с доступом. Если клиенту отказано в доступе к Azure API для FHIR, полезно понять структуру маркера доступа и способ его декодирования для проверки содержимого (утверждений) маркера.
Серверы FHIR обычно ожидают json Web Token (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 для FHIR существуют некоторые сочетания клавиш для получения маркера доступа (например, для отладки) с помощью Azure CLI.
Дальнейшие действия
В этом документе вы узнали о некоторых основных понятиях, связанных с защитой доступа к API Azure для FHIR с помощью Azure AD. Сведения о развертывании службы Azure API для FHIR см. в этой статье.
FHIR® является зарегистрированным товарным знаком HL7 и используется с разрешения HL7.