2014-12-05 16 views
6

Stworzyłem prostą aplikację internetową "cześć-świat", wykorzystującą framework express.js.Uruchomienie uwierzytelniania LTI za pomocą Node.js

Chcę, aby aplikacja była zgodna z IMS-LTI, aby moodle i inne systemy zarządzania szkoleniami mogły ją uruchomić jako narzędzie zewnętrzne.

Jednak nie rozumiem, jak uwierzytelnić uruchomienie LTI w mojej aplikacji (używa oauth), i nie mogę znaleźć żadnych przykładów pliku express.js/node.js, jak to zrobić. Widzę, że istnieje moduł węzła paszportowego (https://www.npmjs.org/package/passport-lti), ale jako noob z węzłem po prostu nie rozumiem skąpej dokumentacji.

Użyłem passport.js tworzyć lokalne uwierzytelnianie - przy użyciu tego wideo (https://www.youtube.com/watch?v=twav6O53zIQ), miałem nadzieję na podobną pomoc dla uwierzytelniania uruchomić LTI ...

Każda pomoc jest mile widziana.

Cheers, Nr

+0

Udało mi się to rozwiązać na końcu. Nie zdawałem sobie sprawy, że moduły węzłów mają kod testowy i dokumentację. Użyłem kodu testowego, aby zrozumieć, jak to zrobić. –

+0

jeśli nie masz nic przeciwko, czy możesz zamieścić tutaj swoją odpowiedź? – agpt

+0

Chciałbym również zobaczyć odpowiedź – rjerue

Odpowiedz

1

Gdy LTI Narzędzie Konsumentów (tj LMS) uruchamia aplikację LTI (Provider Tool) LTI Tool wysłał HTTP POST.

Aby uwierzytelnić, że wpis jest zgodny z prawem, należy sprawdzić, czy zmienna pocztowa "oauth_signature" jest ważna, poprzez ponowne obliczenie podpisu lokalnie przy użyciu udostępnionego tajnego klucza, który został wymieniony z narzędziem Konsument, gdy narzędzie LTI zostało skonfigurowane .

Czynność weryfikacji podpisu OAuth jest prawdopodobnie obsługiwana przez bibliotekę OAuth. Nodejs już to posiada, więc nie należy jej ponownie wdrażać.

Można przeczytać cały proces walidacji żądania uruchomienia w IMS Global documentation

1

Chciałem tylko wspomnieć, że skończyło się robi pracy przykład tego jakiś czas temu.

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) 
     } 
    } 
)) 

skończyło się robi niestandardowej strategii paszport i przy użyciu innej biblioteki zrobić uwierzytelniania.

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

To że new lti.Provider nieco, kluczem jest to, że odbywa się w słup zamów obiektu LTI zrobić uwierzytelniania.

Powiązane problemy