0

我正在研究 LTI 工具提供程序,我已经实现了一个LTI auth 包,并且能够成功地让两个(..one?)有腿的 OAuth 工作,也就是匹配签名,我们都可以重定向,除了一件重要的事情。

我希望能够做的是

  • 如果此用户不存在,请创建并登录
  • 如果用户存在,请登录我们的用户

现在,一旦我重定向到客户端路由,我就无法真正确定我的用户。

LTI 消费者指向我的 Iron Router 服务器路由,如下所示:

Router.route('/lti', { where: 'server' }).post(function() {
    provider.valid_request(request, function(error, valid) {
        if (valid) {
            this.response.writeHead(302, { Location: '/' });
        } else {
            this.response.writeHead(403);
        }
    });
    return this.response.end();
});

有没有我可以用来简单地工作的软件包?我可以使用accounts-base之类的东西吗?我需要实现自己的逻辑吗?

任何帮助或方向表示赞赏。

干杯。

4

1 回答 1

1

我通过实现一次性身份验证令牌系统解决了这个问题,该系统由自定义登录处理程序使用accounts-baseAccounts.registerLoginHandler方法处理。

粗略的身份验证流程概述:

LTI 路由(服务器)

  1. 如果通过身份验证,请创建一个新帐户/更新旧帐户
  2. 将令牌 + 时间戳对象插入到集合中。
  3. 重定向到身份验证路由,将我们的令牌作为参数传递

认证路由(客户端)

  1. 检查我们的用户是否已登录。如果是,请重定向到我们的主路由
    • 如果已提供令牌并且它存在,则将其标记为已使用。由于我们无法在服务器路由中检查用户,如果用户有会话,关闭并再次通过 LMS 打开链接,我们需要处理多余的令牌。
  2. 如果我们的用户未登录,请检查令牌。如果存在,将其传递给自定义身份验证Accounts.callLoginMethod
  3. 我们的自定义登录处理程序验证我们的令牌。如果合法,则使用令牌并登录用户。

我的代码很乱,但是当我重构时,我可能会将它作为 Meteor 包开源。

于 2015-10-22T10:00:16.957 回答