【问题标题】:LTI Integration issue with Desire2LearnDesire2Learn 的 LTI 集成问题
【发布时间】:2015-04-22 18:46:39
【问题描述】:

我正在尝试按照 https://d2l.nl.edu/shared/HelpFiles/10%20Administrator%20Help/learningenvironment/basic_lti_standards_support/org_level_lti_configuration.htmlhttp://devs.valence.desire2learn.com/tag/lti 的说明在 Desire2Learn 中创建一个外部学习工具,但我什至无法让示例测验项目正常工作。

我已经尝试了所有我能想到的方法,并且在某一时刻我让它正常工作并且可以在 Desire2Learn 中正确加载我的学习工具,但它似乎刚刚停止,我无法再弄清楚了我花了 5 个小时试图解决这个问题。我尝试过回显 POST 和局部变量以进行调试,并在工具提供程序内的 URL 字段和 Desire2Learn 中的链接字段中抛出不同的东西。

在我花费的 5 个小时中,我注意到的是,在身份验证过程中重新创建签名时,它永远不会与 POST 数据中发送的 [oauth_signature] 字段匹配,尽管密钥和秘密匹配那些在 LMS 中。

如果这是有道理的,我很感激我能得到的任何帮助,因为我已经在这方面花费了太多时间,无法再思考了。谢谢!

编辑:

这是 Desire2Learn 发送回的上下文数据的 print_r() 以及我正在验证的 OAUTH 参数,下面是我设置的局部变量。

[launch_presentation_locale] => EN-US__
    [tool_consumer_instance_guid] => key
    [tool_consumer_instance_name] => secret
    [tool_consumer_instance_description] => Learning Tool.
    [tool_consumer_instance_contact_email] => 
    [tool_consumer_info_version] => 10.3.0 SP5
    [tool_consumer_info_product_family_code] => desire2learn
    [context_id] => 2440554
    [context_title] => context
    [context_label] => context
    [context_type] => 
    [user_id] => userid_88888
    [roles] => None
    [ext_tc_profile_url] => https://sampleprofileurl.com
    [ext_d2l_token_id] => 386867949
    [ext_d2l_link_id] => 9554
    [ext_d2l_token_digest] => 2bv8al0f+NxuBWpBS36nl/RuNWg=
    [resource_link_id] => 
    [resource_link_title] => LinkTitle
    [resource_link_description] => LinkDes.
    [lis_result_sourcedid] => 808080-89989-234232
    [lis_outcome_service_url] => https://outcomeurl.com
    [lti_version] => LTI-1p0
    [lti_message_type] => basic-lti-launch-request
    [oauth_version] => 1.0
    [oauth_nonce] => 784335425
    [oauth_timestamp] => 1403634776
    [oauth_signature_method] => HMAC-SHA1
    [oauth_consumer_key] => key
    [oauth_callback] => about:blank
    [oauth_signature] => PYCJyQe3jSLTXn8vxet1eknSfoc=
    [basiclti_submit] => Launch Endpoint with BasicLTI Data

$OAUTH_KEY    = 'key';
$OAUTH_SECRET = 'secret'; 
$SITE_URL     = 'https://sample.com';

当最初从 Desire2Learn 发回 POST 数据时,会根据 $_POST['oauth_consumer_key'] 字段检查 $OAUTH_KEY,如果它们相等,则使用 $OAUTH_KEY 和 $OAUTH_SECRET 字段生成临时签名/然后根据 $_POST['oauth_signature'] 字段进行身份验证的令牌。

public static function CheckSignatureForFormUrlEncoded( $url, $httpMethod, $parameters, $secret) {
        $oauthParameters = array();
        $lmsParameters = array();

        // Separate LMS and OAuth parameters
        foreach( $parameters as $key => $value ) {
            if( strpos( $key, self::OAUTH_PREFIX ) === 0 ) {
                $oauthParameters[urldecode( $key )] = urldecode( $value );
                continue;
            }
            $lmsParameters[urldecode( $key )] = urldecode( $value );
        }

        $signature = self::CalculateSignatureForFormUrlEncoded( $url, $httpMethod, $secret, $lmsParameters, $oauthParameters );

        return $parameters[ self::SIGNATURE ] === $signature;   

    }

这就是我被阻止的地方。当 return 语句返回时,或者换句话说 $parameters 数组中的签名值与 $signature 不匹配时,我收到错误“无效的 OAuth 签名”。据我了解,如果我在 LMS 中设置的 'key' 和 'secret' 字段等于我在上面两个变量中设置的字段,则不会发生这种情况。

【问题讨论】:

  • “我尝试做 X 但它不起作用”不是一个有用的问题。 什么不起作用,具体来说?有错误信息吗?您尝试过什么修复它们?你写了什么代码?我想帮忙,但我帮不上忙。
  • 抱歉,解释起来有点复杂。我编辑了我的问题,以提供从 Desire2Learn 发送到我的学习工具的初始 POST 数据,其中包括一些我必须对其进行身份验证的 OAUTH 变量。一切似乎都很好,除了 oauth_signature 字段给我带来了问题。
  • 仍然很难弄清楚这里发生了什么。 CaclulateSignatureForFormUrlEncoded的前提条件是什么? CheckSignatureForFormUrlEncoded的前提条件是否成立?这些是从某个地方来的还是你自己做的?
  • 抱歉这么晚才回复,但是 CalculateSignatureForFormUrlEncoded() 方法会从传递给它的 $parameters 数组中删除未使用的变量,然后调用另一个名为 CalculateSHA1Hash() 的方法,该方法接受一个字符串和 ' secret' 字段作为可选参数,并使用 HMAC_SHA1 算法执行 base64_encode 以散列字符串。正是这个字符串与从 LMS 传递给我的程序的字符串进行比较以执行身份验证。

标签: php lti


【解决方案1】:

好吧,我好像明白了。听起来很愚蠢,我所要做的就是将“index.php”附加到我在 Desire2Learn 中的外部学习工具的链接中的 URL 字段的末尾,以及工具提供程序配置中的启动点字段。在我这样做之后,签名错误消失了,现在一切都好了。显然,工具使用者并没有像我想象的那样专门寻找 index.anything 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多