Жизненные циклы токенов
Токены выпускаются (создаются) сервером, передаются клиентам в ответ на запросы авторизации, и содержат необходимую и актуальную информацию для последующей авторизации действий пользователя при помощи такого токена.
Передача (предъявление) токена клиентом в составе запроса к серверу означает, что клиент желает подтвердить своё право на выполнение запрашиваемой операции или обращение к защищаемому ресурсу.
В UIDM используются токены, представленные в двух форматах: GUID (он же opaque) и JWT.
- GUID
-
Токен представляет из себя уникальный идентификатор в формате GUID. Вся связанная с токеном информация хранится в UIDM.
- JSON Web Token (JWT, RFC 7519)
-
JWT — формат контейнера для передачи данных. UIDM поддерживает токены формата JWT в двух вариантах: JWS (RFC 7515) и JWE (RFC 7516).
Токен формата JWT (далее — токен) представляет из себя последовательность из трёх (JWS) или пяти (JWE) текстовых строк в формате JSON, каждая из которых закодирована алгоритмом Base64URL, и которые разделены точками.
Вариант токена (JWS или JWE) определяется содержимым заголовка токена (Javascript Object Signing and Encryption, JOSE).
- JSON Web Signature (JWS)
-
JWS — это токен формата JWT, в котором тело токена не зашифровано, но токен подписан цифровой подписью.
Если заголовок токена соответствует формату JWS, то токен состоит из трёх секций:
-
заголовка (JOSE Header), в котором содержатся метаданные токена, и указание на криптографические алгоритмы, использованные при его подписании;
-
тела, содержащего в себе JSON c набором клеймов — утверждений, которые могут включать в себя информацию о личности пользователя, разрешенных доступах и т. д.;
-
подписи (сигнатуры), которая подтверждает, что токен не был изменен (не подделан) и ему можно доверять. При использовании токена перед его использованием или сохранением подпись проверяется в обязательном порядке.
-
- JSON Web Encryption (JWE)
-
JWE — это токен формата JWT, в котором тело токена зашифровано.
Если заголовок токена соответствует формату JWE, то токен состоит из пяти секций:
-
заголовка;
-
ключа шифрования;
-
вектора инициализации;
-
зашифрованного текста (тела токена), который вычисляется с использованием ключа шифрования, вектора инициализации и алгоритма шифрования, определенного в заголовке токена;
-
данных, которые подтверждают целостность зашифрованных данных.
-
В тело токена могут включаться произвольные данные, необходимые серверу для авторизации тех или иных операций. Такие данные (поля JSON) называются клеймами (claim).
Если в соответствии с требованиями содержимое токена должно быть закрыт от третьих лиц, тело JWE-токена шифруется на стороне сервера, и не может быть расшифровано на стороне клиента или третьего лица, не обладающих ключом (секретом). Дополнительные сведения (клеймы) могут быть включены в JWS- или JWE-токен только самим сервером, который при необходимости включения в клеймы токена дополнительных сведений создаёт новый токен с дополнительными данными, подписывает или шифрует его и передаёт запрашивающей стороне.
Жизненный цикл токена
Жизненным циклом токена называется период действительности токена и его пригодности для авторизации действий пользователя.
Жизненный цикл токена начинается от момента его выпуска (создания его сервером и передачи запрашивающей стороне) и заканчивается в момент его аннулирования (истечения срока его действия или отзыва).
Виды токенов
Токен доступа (access token)
-
токены доступа.
-
при открытии аутентификационной сессии;
-
после использования токена обновления.
-
по истечении срока действия этого токена;
-
по истечении срока действия аутентификационной сессии;
-
при смене логина или пароля пользователя (аннулируются все токены доступа, кроме того, с использованием которого вызвана операция смены пароля);
-
при отзыве токена с использованием API;
-
при локальном выходе пользователя (logout);
-
при блокировке или удалении учётной записи пользователя.
Событие | Статус токена |
---|---|
Открытие аутентификационной сессии |
Выпуск |
Выход пользователя (logout) |
Аннулирование |
Удаление или блокировка учётной записи пользователя |
Аннулирование |
Смена логина или пароля пользователя |
Аннулирование[1] |
Истечение срока действия токена |
Аннулирование |
Истечение срока действия сессии |
Аннулирование |
Отзыв токена с использованием API |
Аннулирование |
Использование токена обновления |
Выпуск |
Совершение операции с использованием токена |
— |
Вызов специального API для получения экземпляра токена |
— |
Срок действия токена доступа рекомендуется настроить в диапазоне от нескольких минут до часов.
Failed to generate image: Could not load PlantUML. Either require 'asciidoctor-diagram-plantuml' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_PLANTUML_CLASSPATH' environment variable. Alternatively a PlantUML binary can be provided (plantuml-native in $PATH). @startuml skinparam maxMessageSize 150 title "Токен доступа:\n истечение срока действия токена" participant "Сервис" as service database "UIDM" as uidm ?-> uidm: Аутентификация пользователя note over uidm #FFFFFF : Открытие аутентификационной сессии activate uidm service <- uidm ++ : Токен автоматического входа **(3)** service <- uidm ++ : Токен обновления доступа **(2)** service <- uidm ++ #FBFB77 : Токен доступа **(1)** ... через несколько минут ... note over service : Истечение срока действия токена доступа **(1)** service ->x uidm -- : Токен доступа **(1)** недействителен @enduml
Токен обновления доступа (refresh token)
-
одновременно с выпуском токена доступа.
-
по истечении срока действия этого токена;
-
по истечении срока действия аутентификационной сессии;
-
при смене логина или пароля пользователя (аннулируются все токены обновления, кроме того, который выдавался вместе с текущим токеном доступа);
-
при отзыве токена с использованием API
-
при локальном выходе пользователя (logout);
-
при блокировке или удалении учётной записи пользователя.
Событие | Статус токена |
---|---|
Открытие аутентификационной сессии |
Выпуск |
Выход пользователя (logout) |
Аннулирование |
Удаление или блокировка учётной записи пользователя |
Аннулирование |
Смена логина или пароля пользователя |
Аннулирование[2] |
Истечение срока действия токена |
Аннулирование |
Истечение срока действия сессии |
Аннулирование |
Отзыв токена с использованием API |
Аннулирование |
Использование токена обновления |
Выпуск |
Совершение операции с использованием токена |
— |
Вызов специального API для получения экземпляра токена |
— |
Срок действия токена обновления доступа рекомендуется настроить заметно бóльшим, чем время жизни токена доступа. От разницы в настройке времени жизни токена обновления и токена доступа зависит время, в течение которого сервис сможет обновить доступ без выполнения пользователем повторной аутентификации.
Запрос на обновление токена доступа с помощью токена обновления доступа выполняется без дополнительной аутентификации пользователя.
Failed to generate image: Could not load PlantUML. Either require 'asciidoctor-diagram-plantuml' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_PLANTUML_CLASSPATH' environment variable. Alternatively a PlantUML binary can be provided (plantuml-native in $PATH). @startuml skinparam maxMessageSize 150 title "Токен обновления доступа:\n срок действия токена обновления доступа\n в случае выхода пользователя из системы" participant "Сервис" as service database "UIDM" as uidm ?-> uidm: Аутентификация пользователя note over uidm #FFFFFF : Открытие аутентификационной сессии activate uidm service <- uidm ++ : Токен автоматического входа **(3)** service <- uidm ++ #FBFB77 : Токен обновления доступа **(2)** service <- uidm ++ : Токен доступа **(1)** ... через несколько минут ... note over service #FFFFFF : Истечение срока действия токена доступа **(1)** service ->x uidm : Токен доступа **(1)** недействителен deactivate service note over service : Использование токена обновления доступа **(2)** service -> uidm : Токен обновления доступа **(2)** deactivate service service <- uidm ++ #FBFB77 : Новый токен обновления доступа **(5)** service <- uidm ++ : Новый токен доступа **(4)** ... через некоторое время ... ?-> uidm : Выход пользователя из системы (logout) note over uidm #FFFFFF : Закрытие аутентификационной сессии destroy uidm service ->x uidm : Токен доступа **(4)** недействителен deactivate service service ->x uidm : Токен обновления доступа **(5)** недействителен deactivate service note over service #FFFFFF : Токен автоматического входа **(3)** сохраняется @enduml
Токен автоматического входа
-
токены восстановления сессии.
-
при открытии аутентификационной сессии.
-
при отзыве токена с использованием API;
-
по истечении срока действия этого токена.
Событие | Статус токена |
---|---|
Открытие аутентификационной сессии |
Выпуск |
Выход пользователя (logout) |
— |
Удаление или блокировка учётной записи пользователя |
[3] |
Смена логина или пароля пользователя |
— |
Истечение срока действия токена |
Аннулирование |
Истечение срока действия сессии |
— |
Отзыв токена с использованием API |
Аннулирование |
Использование токена обновления |
Выпуск |
Совершение операции с использованием токена |
— |
Вызов специального API для получения экземпляра токена |
— |
Токен автоматического входа не сохраняется на сервере UIDM.
Срок действия токена автоматического входа настраивается и может составлять до нескольких месяцев.
Failed to generate image: Could not load PlantUML. Either require 'asciidoctor-diagram-plantuml' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_PLANTUML_CLASSPATH' environment variable. Alternatively a PlantUML binary can be provided (plantuml-native in $PATH). @startuml skinparam maxMessageSize 150 title "Токен автоматического входа:\n отзыв токена автоматического входа" participant "Сервис" as service database "UIDM" as uidm ?-> uidm: Аутентификация пользователя note over uidm #FFFFFF : Открытие аутентификационной сессии activate uidm service <- uidm ++ #FBFB77 : **(3)** Токен автоматического входа service <- uidm ++ : **(2)** Токен обновления доступа service <- uidm ++ : **(1)** Токен доступа ... через несколько минут ... note over uidm #FFFFFF : Истечение срока действия аутентификационной сессии uidm -> uidm destroy uidm service ->x uidm : Токен доступа **(1)** недействителен deactivate service service ->x uidm : Токен обновления доступа **(2)** недействителен deactivate service ... через некоторое время ... service -> uidm ++ : Использование токена автоматического входа **(3)** note over uidm #FFFFFF : Открытие аутентификационной сессии service <- uidm ++ : **(5)** Токен обновления доступа service <- uidm ++ : **(4)** Токен доступа ... через некоторое время ... ]--> uidm : Отзыв токена автоматического входа **(3)** через API UIDM ... через некоторое время ... note over uidm #FFFFFF : Истечение срока действия аутентификационной сессии uidm -> uidm destroy uidm service ->x uidm : Токен доступа **(4)** недействителен deactivate service service ->x uidm : Токен обновления доступа **(5)** недействителен deactivate service service ->x uidm : Токен автоматического входа **(3)** недействителен deactivate service @enduml
Токен одноразового доступа (per operation access token)
-
токены доступа.
-
после прохождения пользователем аутентификации способом, установленном для этой операции или для операции с отдельными параметрами.
-
немедленно после совершения операции;
-
по истечении срока действия этого токена;
-
по истечении срока действия аутентификационной сессии;
-
при отзыве токена с использованием API;
-
при локальном выходе пользователя (logout);
-
при блокировке или удалении учётной записи пользователя.
Событие | Статус токена |
---|---|
Открытие аутентификационной сессии |
Выпуск[4] |
Выход пользователя (logout) |
Аннулирование |
Удаление или блокировка учётной записи пользователя |
Аннулирование |
Смена логина или пароля пользователя |
Аннулирование |
Истечение срока действия токена |
Аннулирование |
Истечение срока действия сессии |
Аннулирование |
Отзыв токена с использованием API |
Аннулирование |
Использование токена обновления |
— |
Совершение операции с использованием токена |
Аннулирование |
Вызов специального API для получения экземпляра токена |
— |
Failed to generate image: Could not load PlantUML. Either require 'asciidoctor-diagram-plantuml' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_PLANTUML_CLASSPATH' environment variable. Alternatively a PlantUML binary can be provided (plantuml-native in $PATH). @startuml skinparam maxMessageSize 150 title "Токен одноразового доступа:\n срок действия токена одноразового доступа" actor "Клиент" as client participant "Сервис" as service database "UIDM" as uidm client -> service : Начало операции service -> uidm : Передача данных **(А)** для операции client <- uidm : Запрос аутентификации для выполнения операции client -> uidm : Подтверждение выполнения операции note over uidm : Выпуск токена одноразового доступа activate uidm #FBFB77 service <- uidm : Токен одноразового доступа **(1)**, разрешающий выполнение операции service -> uidm : Передача данных для операции **(B)** и токена одноразового доступа **(1)** uidm -> uidm : Проверка действительности токена одноразового доступа **(1)** uidm -> uidm : Проверка совпадения подписей данных **(А)** и **(B)** note over uidm : Аннулирование токена одноразового доступа service <- uidm : Подтверждение успешности операции destroy uidm @enduml
Токен доступа к API (API token)
-
токены доступа.
-
при вызове специального API UIDM.
-
при отзыве токена с использованием API;
-
по истечении срока действия этого токена.
Событие | Статус токена |
---|---|
Открытие аутентификационной сессии |
— |
Выход пользователя (logout) |
— |
Удаление или блокировка учётной записи пользователя |
—[5] |
Смена логина или пароля пользователя |
— |
Истечение срока действия токена |
Аннулирование |
Истечение срока действия сессии |
— |
Отзыв токена с использованием API |
Аннулирование |
Использование токена обновления |
— |
Совершение операции с использованием токена |
— |
Вызов специального API для получения экземпляра токена |
Выпуск |
Системный токен доступа
-
токены доступа.
-
по запросу сервиса к API UIDM.
-
по истечении срока действия этого токена;
-
при отзыве токена с использованием API.
Событие | Статус токена |
---|---|
Открытие аутентификационной сессии |
Выпуск |
Выход пользователя (logout) |
Аннулирование |
Удаление или блокировка учётной записи пользователя |
Аннулирование |
Смена логина или пароля пользователя |
— |
Истечение срока действия токена |
Аннулирование |
Истечение срока действия сессии |
Аннулирование |
Отзыв токена с использованием API |
Аннулирование |
Использование токена обновления |
Выпуск |
Совершение операции с использованием токена |
— |
Вызов специального API для получения экземпляра токена |
— |
Мультиплатформенный токен
-
сессионные токены.
-
при открытии аутентификационной сессии (m2m, AJAX).
-
по истечении срока действия этого токена (срок действия MPT-токена равен сроку действия токена доступа);
-
при локальном выходе пользователя (logout);
-
при смене логина или пароля пользователя;
-
при блокировке или удалении учётной записи пользователя.
Событие | Статус токена |
---|---|
Открытие аутентификационной сессии |
Выпуск |
Выход пользователя (logout) |
Аннулирование |
Удаление или блокировка учётной записи пользователя |
Аннулирование |
Смена логина или пароля пользователя |
Аннулирование |
Истечение срока действия токена |
Аннулирование |
Истечение срока действия сессии |
Аннулирование |
Отзыв токена с использованием API |
Аннулирование |
Использование токена обновления |
— |
Совершение операции с использованием токена |
— |
Вызов специального API для получения экземпляра токена |
— |
Failed to generate image: Could not load PlantUML. Either require 'asciidoctor-diagram-plantuml' or specify the location of the PlantUML JAR(s) using the 'DIAGRAM_PLANTUML_CLASSPATH' environment variable. Alternatively a PlantUML binary can be provided (plantuml-native in $PATH). @startuml skinparam maxMessageSize 150 title "MPT-токен" participant "Сервис №2" as service2 participant "Сервис №1" as service1 database "UIDM" as uidm ?-> uidm: Аутентификация пользователя note over uidm #FFFFFF : Открытие аутентификационной сессии activate uidm service1 <- uidm ++ : Токен автоматического входа service1 <- uidm ++ : Токен обновления доступа **(2)** service1 <- uidm ++ #FBFB77 : Токен доступа **(1)** ?<- uidm : Выпуск MPT-токена **(3)** и передача его пользователю activate uidm #FBFB77 ... через несколько минут ... service2 <- service1 : SSO-переход пользователя из Сервиса №1 в Сервис №2 ?-> uidm : Передача пользователем MPT-токена service2 <- uidm ++ : Токен доступа ... через несколько минут ... service1 -> service1 : Истечение времени жизни токена доступа **(1)** deactivate service1 service1 -> service1 : Истечение времени жизни токена обновления доступа **(2)** deactivate service1 uidm -> uidm : Истечение времени жизни MPT-токена **(3)** deactivate uidm service2 ->x uidm : Отказ в доступе deactivate service2 @enduml
SSO-токен
Предупреждение
|
SSO-token является технически устаревшим и будет удалён в будущих версиях UIDM. |
-
сессионные токены.
-
при открытии аутентификационной сессии (только по login-протоколу).
-
при локальном выходе пользователя (logout);
-
при смене логина или пароля пользователя;
-
при блокировке или удалении учётной записи пользователя.
-
при использовании (выполнении SSO-перехода).
Событие | Статус токена |
---|---|
Открытие аутентификационной сессии |
Выпуск |
Выход пользователя (logout) |
Аннулирование |
Удаление или блокировка учётной записи пользователя |
Аннулирование |
Смена логина или пароля пользователя |
Аннулирование |
Истечение срока действия токена |
Аннулирование |
Истечение срока действия сессии |
Аннулирование |
Отзыв токена с использованием API |
Аннулирование |
Использование токена обновления |
— |
Совершение операции с использованием токена |
— |
Вызов специального API для получения экземпляра токена |
— |
Обмен токенов
Механизм обмена токенов (token exchange) позволяет приложению обменять токен доступа с одним набором атрибутов на другой токен доступа с другим набором атрибутов без повторной аутентификации пользователя.
Такой механизм может быть использован в том числе:
-
для вызова одним сервисом, использующим UIDM, API другого сервиса, также использующего UIDM;
-
для разделения объема полномочий приложения на несколько отдельных токенов доступа и передачи их другим приложениям.
Важно
|
Срок действия токена, полученного в результате операции по обмену токена, определяется настройками UIDM и не зависит от срока действия исходного токена. |