首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LTI与Desire2Learn集成问题

LTI与Desire2Learn集成问题
EN

Stack Overflow用户
提问于 2014-06-24 18:45:02
回答 1查看 579关注 0票数 0

我试图在Desire2Learn中创建一个外部学习工具,方法是遵循configuration.htmlhttp://devs.valence.desire2learn.com/tag/lti的说明,甚至无法让示例测试项目正常工作。

我已经尝试了我所能想到的一切,有一次我让它正常工作,可以在Desire2Learn中正确地加载我的学习工具,但它似乎已经停止了,我无法再弄清楚,因为我花了5个小时试图绕过这个问题。我尝试了一些方法,比如回显POST和局部变量,以便在工具提供程序中的URL字段和Desire2Learn中的链接字段中调试和抛出不同的内容。

在我花在这上面的5个小时里,我注意到的是在身份验证过程中重新创建签名时,它从来不匹配在POST数据中发送的oauth_signature字段,尽管LMS中的密钥和秘密匹配这些字段。

如果这有意义的话,我很感激我能得到的任何帮助,因为我已经花了太多的时间在这件事上,不能再想清楚了。谢谢!

编辑:

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

代码语言:javascript
复制
[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_ used _key‘字段检查$OAUTH_KEY,如果它们相等,则使用$OAUTH_KEY和$OAUTH_SECRET字段生成临时签名/令牌,然后根据$_POST’‘oauth_signature’字段进行身份验证。

代码语言:javascript
复制
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;   

    }

这就是我被拦阻的地方。当返回语句时,或者换句话说,$parameters数组中的签名值与$signature不匹配时,我将得到错误“无效的OAuth签名”。据我所知,如果我在LMS中设置的“键”和“秘密”字段与我在上述两个变量中设置的字段相等,则不应该发生这种情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-25 19:36:35

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24394034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档