Актуальную версию документа см. на сайте Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации по адресу https://digital.gov.ru/ru/documents/6186/.

В.5 Сведения о структуре и проверке маркера доступа

Используемый ЕСИА маркер состоит из трех частей:

1. Заголовок (header), в котором содержится общая информация о типе маркера, в том числе об использованных в ходе его формирования криптографических операциях.

2. Набор утверждений (payload/claim set) с содержательными сведениями о маркере.

3. Подпись (signature), которая удостоверяет, что маркер "выдан" ЕСИА и не был изменен при передаче.

Части маркера разделены точкой, так что он имеет вид:

HEADER.PAYLOAD.SIGNATURE

Маркер передается в виде строки в формате Base64url <64>.

--------------------------------

<64> Подробнее см. в: http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-02#appendix-B

Каждая часть маркера содержит набор утверждений (claims) трех типов:

Заголовок (header) содержит описание свойств используемого маркера:

1. Алгоритм шифрования ("alg", стандартное обозначение); в настоящее время в ЕСИА поддерживается алгоритм электронной подписи ГОСТ Р 34.10-2012 (соответствует значению "GOST3410_2012_512"). <65>

--------------------------------

<65> Подробнее см. РП Технологического портала ЕСИА, п. 3.1.1 и п. 3.1.2: http://digital.gov.ru/ru/documents/6190/

2. Глобальный тип маркера ("typ", стандартное обозначение), который в ЕСИА всегда имеет значение "JWT" (JSON Web Token);

3. ЕСИА - специфический тип маркера и его версия ("sbt" и "ver" соответственно, приватное обозначение), что необходимо для использования в ЕСИА нескольких типов маркера; для маркера доступа - "access".

Например, заголовок маркера доступа в ЕСИА будет иметь следующий вид:

{"alg":"GOST3410_2012_512","typ":"JWT","ver":0,"sbt":"access"}

Сообщение (payload) включает в себя содержательные утверждения о субъекте. В случае, если система проводит аутентификацию пользователя с использованием механизма SAML, системе нет необходимости разбираться в формате payload маркера доступа. Однако если система проводит аутентификацию пользователя с использованием REST, ей необходимо извлечь необходимую информацию из сообщения маркера (payload) и проверить подпись ЕСИА.

Сообщение включает в себя содержательные утверждения о маркере доступа и субъекте:

1. Данные о маркере доступа:

- время прекращения действия ("exp") - в секундах с 1 января 1970 г. 00:00:00 GMT;

- время начала действия ("nbf") - в секундах с 1 января 1970 г. 00:00:00 GMT, т.е. маркер нельзя обрабатывать до наступления указанного времени;

- время выдачи ("iat") - в секундах с 1 января 1970 г. 00:00:00 GMT;

- организация, выпустившая маркер ("iss"), для маркеров ЕСИА всегда имеет определенное значение, которое совпадает с полем "субъект" используемого сертификата ЕСИА (http://субъект);

- адресат маркера ("client_id") - утверждение, ограничивающее системы/приложения ("аудитория"), которые могут использовать этот маркер. Для обозначения адресата в ЕСИА используется мнемоника данной ИС, зарегистрированной в ЕСИА. Соответственно, использовать маркер могут только системы с этой мнемоникой.

- идентификатор маркера ("urn:esia:sid") - набор случайных символов, имеющий вид 128-битного идентификатора, сгенерированного по стандарту UUID.

2. Данные о субъекте:

- идентификатор субъекта ("urn:esia:sbj_id"), в качестве значения указывается oid, этот идентификатор уникален для каждого субъекта, зарегистрированного в ЕСИА;

- область доступа ("scope"), в качестве значения - название области, к которой предоставляется доступ (например, "id_doc").

3. Данные о наличии делегирования полномочий ("urn: esia:authority"):

- дата истечения срока действия доверенности ("expired");

- идентификатор доверенности в ЕСИА ("id").

Пример сообщения (payload) маркера доступа в ЕСИА:

{

"nbf": 1537889904,

"urn:esia:authority": {

"expired": "16.09.2018",

"id": "1020"

},

"scope": "http://esia.gosuslugi.ru/usr_sec?mode=w&oid=1000299526

http://esia.gosuslugi.ru/usr_inf?mode=w&oid=1000299526 openid

http://esia.gosuslugi.ru/org_inf?org_oid=1000000001",

"iss": "http://esia.gosuslugi.ru/",

"urn:esia:sid": "dfa8dfe4e2cbad40fcfc974a9bcd445b570c2c90c22612047a940c56afa2c463",

"urn:esia:sbj_id": 1000299526,

"exp": 1537893504,

"iat": 1537889904,

"client_id": "PROFILE"

}

Подпись (signature) маркера осуществляется по тому алгоритму, который указывается в параметре "alg" маркера. Подпись вычисляется от двух предыдущих частей маркера (HEADER.PAYLOAD).

Системе-клиенту, использующей механизмы REST и OAuth 2.0 для аутентификации пользователей, рекомендуется осуществлять проверку маркера доступа, используя данные о его подписи. В общем виде эта процедура включает в себя следующие шаги <66>:

--------------------------------

<66> Подробнее см.: http://tools.ietf.org/pdf/draft-jones-json-web-token-10.pdf, http://tools.ietf.org/pdf/draft-ietf-jose-json-web-signature-02.pdf, http://tools.ietf.org/pdf/draft-ietf-jose-json-web-encryption-02.pdf

1. Осуществление base64url-декодирования первых двух частей маркера. В header указан алгоритм шифрования (параметр alg).

2. Третья часть маркера доступа представляет собой подпись в кодировке UTF-8 от значений первых двух частей маркера доступа (HEADER.PAYLOAD). Необходимо осуществить проверку данной электронной подписи с использованием сертификата ключа проверки электронной подписи ЕСИА.

3. Проверка времени выдачи, начала и прекращения маркера.

4. Проверка организации, выпустившей маркер, а также адресата маркера.