【问题标题】:Desire2Learn invalid oAuth signature with LTI Learning Tool Link使用 LTI 学习工具链接的 Desire2Learn 无效 oAuth 签名
【发布时间】:2013-09-17 10:56:38
【问题描述】:
【问题讨论】:
标签:
oauth
desire2learn
lti
【解决方案1】:
D2L 工具消费者实施也已针对 IMS 参考实施成功地进行了测试。但是,在学习环境中注册和配置外部学习工具有点棘手。
在外部学习工具管理工具中,您可以管理特定的列表链接(嵌入时会在 LMS 中创建 LTI 启动点)以及工具提供者配置列表(例如,如果您有一个工具提供者,但希望为同一工具提供者嵌入多个 LTI 启动链接)。学习环境中用于管理这两个项目列表的确切 UX 取决于您的 LE 的版本......在早期支持 LTI 的 LE 中,工具提供者列表隐藏在外部学习工具上的设置齿轮后面我认为管理页面;在后来的 LE 中,链接列表和工具提供者列表在管理页面中更加平等地可见。
工具提供者列表允许您为工具提供者提供密钥和秘密,并使用它来签署 LTI 启动,而不是为工具消费者本身配置的默认密钥/秘密 ("使用自定义工具消费者信息而不是默认值”)。
链接列表允许您 (a) 选择从链接签署 LTI 启动,以及 (b) 使用工具使用者密钥/秘密或特定于 LTI 链接本身的密钥签署启动。 注意,如果您为外部学习工具链接条目使用匹配的工具提供者条目,并且如果该工具提供者条目具有设置为覆盖默认工具的密钥/秘密消费者信息,然后如果在上面的 (b) 中您选择使用工具消费者密钥/密钥对启动进行签名,则此工具提供者覆盖密钥/密钥用于签署启动。
是的,这令人困惑。
所以 - 启动是否已签名,取决于链接的“编辑链接”页面中的设置。 如果启动已签名,则可以使用“编辑链接”页面上提供的“链接密钥/秘密”进行签名,或可以使用'工具消费者密钥/秘密'。 如果是最后一个,那么它将首先检查匹配的工具提供者条目覆盖以提供密钥/秘密,如果找不到,它将使用为整个 LE 设置的密钥/秘密。
完成所有设置后,您可以从“编辑链接”页面中的链接“预览请求”进行测试启动。您还可以也“预览请求详细信息”,这将带您进入一个页面,该页面向您显示 LTI POST 正文表单的外观 - 从那里您可以验证 oauth 属性是否会显示在启动表单——如果他们不在那个预览表单中,那么你的启动没有得到签名。如果 oauth 属性在表单中,那么您可以看到将发送的内容,您可以使用这些值进行调试/测试。
【解决方案2】:
部分感谢 Viktor 对预览请求的建议,我能够对此进行调试。
在我的工具提供程序中,我正在检查某些非必需的 LTI 参数。当消费者的请求中不存在这样的参数时,我将其设置为空字符串,而不是抛出异常。
使用 IMS 测试使用者,我发现当我将请求参数设置为空字符串时,而工具使用者完全省略了该字段,即使两个 base_strings 匹配,我们的签名也会有所不同。我仍然不完全理解这一点;我对 oAuth 的理解是,使用相同密钥和秘密签名的两个相同字符串将产生相同的签名。无论如何,现在更好地验证请求参数可以确保我们的字符串——和签名——匹配。