Что такое LTI?
Из Рецепта создания поставщиков инструментов LTI 1 | IMS Global Learning Consortium :
LTI (Learning Tools Interoperability®) предоставляет стандартный механизм для авторизации пользователей, получающих доступ к веб-приложению (поставщик инструментов) из другого веб-приложения (Потребитель инструментов, обычно LMS). Это можно рассматривать как замену страницы входа в систему, которую поставщик инструментов мог бы в противном случае предоставить, и позволяет избежать необходимости сообщать имя пользователя и пароль каждому пользователю. Вместо этого получено подписанное сообщение о запуске от потребителя инструмента, которое можно проверить, а затем доверять. Это сообщение должно содержать достаточно данных для создания учетных записей пользователей и соответствующих ресурсов (или сопоставлений ресурсов) «на лету». Пользователи получают беспрепятственный опыт без необходимости какой-либо предварительной подготовки, участия каких-либо других серверов (например, поставщиков удостоверений) или изменения каких-либо брандмауэров (сообщение отправляется через браузер пользователя). LTI работает лучше всего, когда поставщик инструментов делегирует полную ответственность за авторизацию пользователей потребителю инструментов и не позволяет пользователям напрямую обращаться к своей системе, тем самым обходя эту авторизацию. Это означает, что нет необходимости синхронизировать две системы с любыми изменениями прав пользователей, поэтому нет риска того, что пользователю будет предоставлен доступ к ресурсам, на которые он больше не имеет права.
Пример кода
В этом примере я реализовал простой потребитель инструмента LTI 1.0 (TC) на статической HTML-странице, используя JavaScript для генерации нестатических параметров сообщения формы: Simple LTI Launch Test
Этот TC включает в себя минимум полей, необходимых для создания действительного запуска LTI. В этом случае сгенерированный запуск будет опубликован в saLTIre эмулятор поставщика инструментов LTI, который способен проверить наш запрос на запуск.
Если вы откроете инструменты разработчика на странице Простой тест запуска LTI, вы увидите, что и форма, и скрипт были зарегистрированы в консоли.
Расширение тега <script>
в консоли показывает сценарий, использованный для генерации <form>
выше, а также логику, которая генерирует значения для полей oauth_nonce
, oauth_timestamp
и oauth_signature
. Для удобства сюда же включен скрипт:
Этот скрипт использует модуль npm oauth-sign для генерации действительной подписи HMAC-SHA1 из коллекции params
, а затем добавляет значение подписи к новому свойству в params, называемому oauth_signature
. Затем весь набор параметров используется для заполнения атрибута action
и узлов <input>
в форме с идентификатором ltiForm
, как мы можем видеть, развернув <form>
в консоли. Для удобства ниже приведен пример:
OAuth 1.0a
Базовый LTI использует протокол OAuth (http://www.oauth.net) для защиты взаимодействия сообщений между TC и TP. OAuth требует ключ и общий секрет для подписи сообщений. Ключ передается с каждым сообщением, а также сгенерированная OAuth подпись на основе ключа. TP ищет секрет на основе предоставленного ключа, повторно вычисляет подпись и сравнивает повторно вычисленную подпись с переданной подписью, чтобы проверить учетные данные отправителя.
Согласно разделу 4.2 спецификации LTI 1.0 Базовая подпись сообщений LTI и спецификации OAuth 1.0a для действительного запроса OAuth 1.0a требуются следующие поля OAuth:
oauth_consumer_key
oauth_nonce
oauth_signature_method
oauth_timestamp
oauth_version
oauth_signature
LTI 1.0
Параметры, необходимые для действительного запроса LTI, являются надмножеством параметров, необходимых для действительного запроса OAuth. Другими словами, вам понадобятся как минимум поля, перечисленные выше, а также обязательные поля LTI, перечисленные ниже:
Минимальные обязательные поля для запроса на запуск LTI
lti_message_type
(всегда:basic_lti-launch-request
)lti_version
(всегда:LTI-1p0
)resource_link_id
Хотя эти поля действительно являются минимальным обязательным полем для действительного запроса на запуск LTI, следующие дополнительные поля рекомендуются спецификацией, при этом некоторые из следующих полей обязательны в определенных Поставщики инструментов LTI:
resource_link_title
user_id
roles
context_id
context_title
context_label
launch_presentation_document_target
launch_presentation_width
launch_presentation_height
launch_presentation_return_url
tool_consumer_instance_guid
tool_consumer_instance_name
tool_consumer_instance_contact_email
Следующие дополнительные поля рекомендуются, если они не заблокированы из-за настроек конфиденциальности:
lis_person_name_given
lis_person_name_family
lis_person_name_full
lis_person_contact_email_primary
В перспективе: преимущества LTI
В одном из следующих постов (после завершения спецификации LTI 1.3) я рассмотрю новые методы аутентификации и подписи OAuth 2 + JWT, необходимые в LTI 1.3 и LTI Advantage.
- Преимущество LTI | IMS Global Learning Consortium
- Обзор преимуществ LTI | IMS Global Learning Consortium
- Часто задаваемые вопросы о преимуществах LTI | IMS Global Learning Consortium
- Дорожная карта внедрения LTI | IMS Global Learning Consortium
Проблемы с методом подписи OAuth 1.0a LTI 1.x
(tl; dr - SHA1 небезопасен, OAuth 1.0a устарел)
LTI 1.3+ OAuth 2 / JWT
Участвующие участники IMS Global Learning Consortium, которые возглавляют развитие LTI, отреагировали на опасения рынка по поводу конфиденциальности и безопасности данных учащихся, приняв отраслевой стандартный протокол OAuth2 для служб аутентификации вместе с веб-токенами JSON (JWT) для безопасной подписи сообщений.
Новые требования к сертификации в 2018 году
Дополнительное чтение
- Написание материалов LTI
- Центр приложений Edu - Основные сведения - Параметры POST
- Понимание подписи запросов для провайдеров Oauth 1.0a
- Авторизация вызовов API Twitter в Javascript
- Взаимодействие средств обучения как механизм единого входа | IMS Global Learning Consortium
- Рецепт создания поставщиков инструментов LTI 1 | IMS Global Learning Consortium
- Взаимодействие средств обучения: пример кода | IMS Global Learning Consortium
- Средства обучения | Совместимость средств обучения - это не просто спецификация