6

我使用 express.js 框架创建了一个简单的“hello-world”网络应用程序。

我希望该应用程序符合 IMS-LTI 标准,以便 moodle 和其他学习管理系统可以将其作为外部工具启动。

但是,我不明白如何在我的应用程序中验证 LTI 启动(它使用 oauth),我也找不到任何 express.js/node.js 示例来说明它是如何完成的。我看到一个 passport-lti 节点模块存在(https://www.npmjs.org/package/passport-lti),但作为一个节点的菜鸟,我只是不了解稀疏的文档。

我已使用 passport.js 创建本地身份验证 - 使用此视频 ( https://www.youtube.com/watch?v=twav6O53zIQ ),我希望为 LTI 启动身份验证提供类似帮助...

任何帮助表示赞赏。

干杯,奥利

4

2 回答 2

3

只是想提一下,我不久前做了一个工作示例。

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对象来做auth。

于 2018-02-07T19:05:44.637 回答
1

当 LTI 工具消费者(即 LMS)启动 LTI 应用程序(工具提供者)时,向 LTI 工具发送一个 HTTP Post。

为了验证帖子是否合法,您需要通过使用在配置 LTI 工具时与工具使用者交换的共享密钥在本地重新计算签名来验证帖子变量“oauth_signature”是否有效。

验证 OAuth 签名的行为可能由 OAuth 库处理。nodejs 已经有这些,所以请不要重新实现。

您可以在IMS Global 文档中阅读验证启动请求的完整过程

于 2017-08-08T18:25:23.447 回答