Аутентификация запуска LTI с помощью Node.js

Я создал простое веб-приложение hello-world, используя фреймворк express.js.

Я хочу, чтобы приложение было совместимым с IMS-LTI, чтобы Moodle и другие системы управления обучением могли запускать его как внешний инструмент.

Однако я не понимаю, как аутентифицировать запуск LTI в моем приложении (оно использует oauth), и я не могу найти ни одного примера express.js / node.js о том, как это делается. Я вижу, что существует модуль узла паспорта-lti (https://www.npmjs.org/package/passport-lti), но как новичок с узлом я просто не понимаю скудную документацию.

Я использовал password.js для создания локальной аутентификации - используя это видео (https://www.youtube.com/watch?v=twav6O53zIQ), я надеялся на аналогичную помощь для аутентификации запуска LTI ...

Любая помощь приветствуется.

Ура, Олли


person Oliver McPhee    schedule 05.12.2014    source источник
comment
В конце концов, мне удалось с этим справиться. Я не понимал, что модули узлов поставляются вместе с тестовым кодом и документацией. Я использовал тестовый код, чтобы понять, как это сделать.   -  person Oliver McPhee    schedule 22.12.2014
comment
Если вы не возражаете, не могли бы вы написать здесь свой ответ?   -  person agpt    schedule 11.04.2017


Ответы (2)


Когда потребитель инструментов LTI (то есть LMS) запускает приложение LTI (поставщик инструментов), инструменту LTI отправляется сообщение HTTP.

Чтобы подтвердить, что сообщение является законным, вам необходимо убедиться, что переменная сообщения 'oauth_signature' действительна, путем локального пересчета подписи с использованием общего секретного ключа, которым вы обменивались с Tool Consumer при настройке инструмента LTI.

Акт проверки подписи OAuth, скорее всего, выполняется библиотекой OAuth. В nodejs они уже есть, поэтому, пожалуйста, не добавляйте ее заново.

Вы можете прочитать полный процесс проверки запроса на запуск в IMS Глобальная документация

person pfranza    schedule 08.08.2017

Просто хотел упомянуть, что некоторое время назад я сделал рабочий пример этого.

https://github.com/ripples/Present/blob/master/server/app.js#L35

passport.use('lti-strategy', new CustomStrategy(
    function(req, callback) {
        var val = (req.body) ? req.body : req.user      
        try{
            var provider = new lti.Provider(val , process.env.LTI_SECRET)   
            if(req.user){
                callback(null, val)         
            }
            else{
                provider.valid_request(req, function(err, isValid) {
                    if(err){
                        console.log("LTI Error", err, isValid)
                    }
                    callback(err, val)
                });
            }       
        }
        catch(err){
            console.log("Authenication error", err)
            callback(err, null)
        }
    }
))

В итоге я применил стратегию индивидуального паспорта и использовал другую библиотеку для аутентификации.

https://github.com/omsmith/ims-lti

Это тот new lti.Provider бит, ключ в том, что он принимает объект LTI post req для выполнения аутентификации.

person rjerue    schedule 07.02.2018
comment
Мне удалось установить его на свой сервер node.js, но я не могу понять, как его использовать. - person aless80; 08.01.2019
comment
@ aless80, я не могу вам помочь, если вы не приведете более точный пример того, где вы застряли / что не работает. У одного парня, которому я помог с этим, возникла проблема с настройкой героя. - person rjerue; 09.01.2019
comment
Вы правы, и мне придется снова попробовать ваш код. Меня смущал код ims-lti. Похоже, что в коде документации скобки были опущены. В итоге я адаптировал пример отсюда: сообщество .canvaslms.com / thread / - person aless80; 10.01.2019
comment
Я пытаюсь использовать PAOL Present, но start-pm2-prod не запускается - person aless80; 10.01.2019
comment
Не могли бы вы рассказать подробнее или опубликовать проблемы в реальном репо? Я больше не нахожусь в учреждении, обслуживающем его, хотя знаю, что у меня, вероятно, есть одна из немногих реализаций паспорта lti, работающая в сообществе FOSS. Он предназначен для работы с PAOL, которая представляет собой целую систему записи лекций. Я не работал над этим уже много лет. Я бы посоветовал посмотреть на источник, а не на его функционирование. - person rjerue; 15.01.2019