2014-12-05 81 views
6

我使用express.js框架創建了一個簡單的'hello-world'web應用程序。LTI使用Node.js啓動身份驗證

我希望應用程序符合IMS-LTI標準,以便moodle和其他學習管理系統可以將其作爲外部工具啓動。

但是,我不明白如何在我的應用程序(它使用oauth)中驗證LTI啓動,並且我找不到任何express.js/node.js示例。我發現存在passport-lti節點模塊(https://www.npmjs.org/package/passport-lti),但作爲節點的noob,我只是不理解稀疏文檔。

我已經使用passport.js創建本地認證 - 使用這個視頻(https://www.youtube.com/watch?v=twav6O53zIQ),我希望爲LTI推出認證類似的幫助......

任何幫助表示讚賞。

乾杯, 奧利

+0

我終於做到了這一點。我沒有意識到節點模塊帶有測試代碼和文檔。我使用測試代碼來了解如何執行此操作。 – 2014-12-22 16:21:28

+0

如果你不介意,你可以在這裏發表你的答案嗎? – agpt 2017-04-11 10:42:26

+0

也想看到答案 – rjerue 2017-11-13 22:40:33

回答

1

當LTI工具消費者(即一個LMS)啓動一個應用LTI(工具提供商)的LTI工具被髮送的HTTP POST。

爲了驗證帖子是否合法,您需要通過在配置LTI工具時使用與工具使用者交換的共享密鑰在本地重新計算簽名來驗證帖子變量'oauth_signature'是否有效。

驗證OAuth簽名的行爲很可能由OAuth庫處理。nodejs已經有了這些,所以請不要重新實現它。

可以讀取驗證在IMS Global documentation

1

推出請求的全過程只是想提一提,我最後做的這個工作的例子一段時間回來。

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後REQ對象做身份驗證。