Система управления доступом (N3.СУД) предназначена для авторизации и аутентификации внешних клиентов платформы N3.Здравоохранение при обращении к компонентам платформы, а также при запросе данных, хранящихся в ней. N3.СУД реализует модель доступа, основанную на утверждениях, а также поддерживает внешних провайдеров авторизации таких, как LDAP и ЕСИАиА.
Модель доступа на основе утверждений позволяет гибко настраивать систему, что обеспечивает ее быструю адаптацию к существующим процессам региона.
На стороне системы управления доступом N3.СУД реализована возможность предоставления доступа с использованием 1) данных учетной записи LDAP и 2) определения прав на основе утверждений (claims base), которые можно сгруппировать в две группы: базовые и дополнительные. Далее утверждения будем называть политиками доступа.
Полный перечень политик доступа приведен в таблице ниже:
/.ClosedCase
Уровень политики |
Политика |
Наименование политики |
---|---|---|
Набор корневых политик |
urn:SPb.MIAC.Policies |
Набор политик доступа к ресурсам СПб МИАЦ. |
Корневая |
/.LDAP |
Политика доступа к ресурсам МИАЦ через LDAP. |
Корневая |
/.IEMK |
Набор политик доступа к ресурсам ИЭМК. |
Базовая |
/.MIS |
Политика доступа к ресурсам ИЭМК посредством МИС. |
Базовая |
/.MO.MP |
Политика доступа МР из МО к ресурсам ИЭМК (расширенная). |
Базовая |
/.Patient |
Набор Политик доступа к данным ИЭМК Пациента. |
Дополнительная |
/.ClosedCase |
Пациент имеет Закрытый Случай Обслуживания (ЗСО) в МО за последние 30 дней. |
Дополнительная |
/.Grant |
Пациент дал согласие через ЛК Пациента. |
Дополнительная |
/.OpenCase |
Пациент имеет Открытый Случай Обслуживания (ОСО) в МО. |
Дополнительная |
/.TMC.Doctor.Access |
Пациент направлен к врачу по направлению. |
Дополнительная |
/.MQ |
Наличие активных направлений в целевой МО. |
Дополнительная |
/.ServicedBy |
Пациент прикреплен к МО по программе ОМС. |
Корневая |
/.ACPS |
Активная карточка СМП. |
Базовая |
/.MIS |
Политика доступа к ресурсам ИЭМК посредством МИС. |
Базовая |
/.MO.MP |
Политика доступа МР из МО к ресурсам скорой помощи (расширенная). |
Базовая |
/.Patient |
Набор Политик доступа к данным скорой помощи Пациента. |
Дополнительная |
/.OpenCase |
Пациент имеет Открытый Случай Обслуживания (ОСО) в МО. |
На стороне системы управления доступом N3.СУД реализована возможность предоставления доступа с использованием данных учетной записи LDAP (Lightweight Directory Access Protocol). Пример запроса к СУД с использованием LDAP-авторизации приведен в разделе "Примеры запросов".
При получение прав доступа с использованием политик доступа предполагается, что в момент проверки поступившего запроса на доступ, все базовые политики должны разрешиться полностью, в то время как дополнительные политики разрешаются независимо друг от друга. Для предоставления доступа внешнему клиенту необходимо и достаточно разрешения одной из политик.
Состав дополнительных политик доступа определяется оператором каждого региона отдельно. Пример запроса к СУД со стороны МО приведен в в разделе "Примеры запросов".
Общий порядок получения доступа к данным ИЭМК пациента через Портал врача отображен на диаграмме.
Процесс представляет собой последовательность следующих шагов:
Ниже представлено более подробная информация, касающаяся каждого из указанных шагов.
Запрос идентификатора карточки пациента в ИЭМК производится путем вызова метода GetPatient модуля работы с пациентом сервиса ИЭМК.
Для вызова метода и получения идентификатора достаточно указать следующие параметры:
Параметр ответа Patient.IdGlobal и будет искомым идентификатором.
Для того, чтобы получить токен доступа от СУД с телом запроса необходимо выполнить несколько относительно сложных для восприятия шагов:
Ниже указанные шаги описаны более подробно.
Для получения сессионного ключа доступа к информационным ресурсам платформы N3 необходимо сформировать и отправить в сервис СУД запрос, в котором указываются реквизиты: а) вызывающей стороны, и б) целевого ресурса (например, сервиса ИЭМК). Запрос представляет собой XML-документ определенного формата, содержащий определенные параметры.
Текущая реализация СУД предполагает использование одной из 2-х групп сценариев, содержащих следующие параметры для построения запросов на доступ:
${<Имя атрибута>} | Описание параметра |
---|---|
Группа "Авторизация через данные МО" | |
${MP.snils} |
СНИЛС медицинского работника. |
${MO.guid} |
GUID медицинской организации (См. значения справочника urn:oid:1.2.643.2.69.1.1.1.64 подсистемы НСИ.). |
${MIS.oid} |
OID МИС (См. значение справочника urn:oid:1.2.643.2.69.1.2 подсистемы НСИ.) |
${Patient.IdGlobal} |
Идентификатор пациента ИЭМК. |
${MP.lastName} |
Фамилия медицинского работника. |
${MP.firstName} |
Имя медицинского работника. |
${MP.patronymic} |
Отчество медицинского работника. |
Группа "LDAP-авторизация" | |
${LDAP.login} |
Логин учетной записи LDAP медицинского работника/организации; |
${LDAP.password} |
Пароль учетной записи LDAP медицинского работника/организации. |
На этом шаге производится кодирование полученного в п. 3.2.1 XML-документа c корневым элементом XACMLAuthzDecisionQuery с помощью кодировки Base64 (см спецификацию «The Base64 Alphabet» приведена в Table 1 в RFC 4648 и в RFC 2045 для операций кодирования и декодирования).
Сформированное тело запроса в п. 3.2.2 подвергается URL-кодированию, согласно требованиям, изложенным в стандарте языка JavaScript ECMAScript 2015 (6th Edition, ECMA-262).
Для получения токена доступа требуется отправить POST запрос в сервис СУД с использованием метода POST по адресу: <ACS.URL>/connect/token, где <ACS.URL> - адрес сервиса СУД.
grant_type=urn:ietf:params:oauth:client-assertion-type:saml2-bearer &assertion=<КодированныйКонтент> &scope=iemk_portal+openid
<КодированныйКонтент> - кодированная результирующая строка из п. 3.2.3, которая закодирована в Base64 и URL, XML-документа c корневым элементом XACMLAuthzDecisionQuery.
Пример кодированного тела запроса приведен в ниже
Заголовок POST-запроса в сервис СУД должен содержать параметры, приведенные в таблице
Свойство | Значение | Примечание |
---|---|---|
Authorization | Basic {учетные данные} |
Учетные данные представляют собой строку в формате {логин}:{пароль}. Далее строка кодируется Base64. Например, учетные данные mis1:secret будут представлены в виде строки: bWlzMTpzZWNyZXQ= |
Host | <N3.ACS.host> | <N3.ACS.host> - DNS имя или IP адрес узла сети, на котором размещен СУД. |
Content-Length | <ДлинаДанных> |
Размер передаваемых данных в байтах. В качестве передаваемых данных рассматривается тело HTTP запроса, сформированное на шаге Формирование запроса к СУД и кодирование URL. |
Accept | application/json | Константа |
Content-Type | application/x-www-form-urlencoded | Константа |
Expect | 100-continue | Константа |
Connection | Keep-Alive | Константа |
Пример:
POST https://login.zdrav.netrika.ru/connect/token HTTP/1.1 Authorization: Basic bWlzMTpzZWNyZXQ= Accept: application/json Content-Type: application/x-www-form-urlencoded Host: login.zdrav.netrika.ru Content-Length: 5188 Expect: 100-continue Connection: Keep-Alive
В ответе от СУД будет получено сообщение следующего вида:
{"access_token":"<ТокенДоступа>","expires_in":3600,"token_type":"Bearer"}
<ТокенДоступа> - последовательность символов.
{ "access_token": "d3c2bdbb1300a99d9e5a8b0f49843a555af39f7efe009775acabdfdfd2e9f5a2", "expires_in": 3600, "token_type": "Bearer" }
Для вызова портала ИЭМК полученный токен доступа от СУД должен быть использован для формирования URL следующего вида:
<IEMK.Portal.URL>/Patient/<Patient.IdGlobal>/Encounters?access_token=<ТокенДоступа>
где:
Пример
http://r78-rc.zdrav.netrika.ru/EMKUI/Patient/15500e82-75ad-4e31-9e58-4d9d0957d20a/Encounters?access_token=82ec05795d7d72d28f2dfe300d2fbfcdbf4faea3f9171aac10f26b5b991be870
Веб-интерфейс Портала ИЭМК может быть открыт с помощью агента (браузера) при использовании HTTP метода GET. То есть, например, указанный URL может быть введен в адресную строку браузера.
В случае, если сформированный в СУД и используемый в запросе к порталу токен доступа корректен и разрешает доступ к данным ИЭМК Пациента, то Веб-интерфейс Портала ИЭМК позволит просматривать все записи и документы, связанные с данным Пациентом. Если токен доступа некорректен относительно запрашиваемых через портал данных ИЭМК Пациента, то в Веб-интерфейсе Портала ИЭМК будет выведено сообщение об отказе в доступе. Если токен доступа устарел, то пользователь будет перенаправлен на страницу авторизации с помощью учётной записи LDAP.
Имя ошибки | Описание решения |
---|---|
invalid_scope | Допущены синтаксические ошибки в формирование запроса. |
invalid_grant | Ни одна из политик СУД не пройдена. |
unsupported_grant_type |
Невалидный запрос |