2014-06-24 89 views
0

我試圖在Desire2Learn中創建一個外部學習工具,按照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的指示進行操作,甚至無法獲得示例測驗項目的工作。LTI集成問題與Desire2Learn

我試過了我能想到的所有事情,並且在某一點上我有它的工作,並且可以在Desire2Learn中正確加載我的學習工具,但它似乎剛剛停止,我無法再計算出來,因爲我花了5個小時試圖解決這個問題。我試圖通過回顯POST和本地變量來調試和拋出Desire2Learn中工具提供程序和鏈接字段內的URL字段中的不同內容。

我在這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'; 

當POST數據最初從Desire2Learn送回,$ OAUTH_KEY靠在$ _POST [「oauth_consumer_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; 

    } 

這是我被阻止的地方。當返回語句返回時,或換句話說,$ parameters數組中的簽名值與$ signature不匹配時,會出現「無效的OAuth簽名」錯誤。根據我的理解,如果我在LMS中設置的'key'和'secret'字段與我在上面兩個變量中設置的那些字段相同,就不會發生這種情況。

+0

「我試圖做X,它不工作」不是一個有用的問題。 *什麼*不起作用,特別是?有錯誤消息嗎?你有什麼試圖解決它們?你寫了什麼代碼?我想幫忙,但我不能。 – Alex

+0

對不起,解釋起來有點複雜。我編輯了我的問題,以提供從Desire2Learn發送到我的學習工具的初始POST數據,幷包含一些我必須進行身份驗證的OAUTH變量。一切似乎很好,除了oauth_signature字段給我的問題。 – hRdCoder

+0

要弄清楚這裏發生了什麼,仍然是非常困難的。 'CaclulateSignatureForFormUrlEncoded'的前提條件是什麼?是否支持「CheckSignatureForFormUrlEncoded」的前提條件?有沒有來自某個地方,或者你是否在自己的? – Alex

回答

0

好吧,我似乎已經想通了。雖然聽起來很愚蠢,但我所要做的只是將'index.php'附加到Desire2Learn中我的外部學習工具鏈接的URL字段末尾,以及工具提供程序配置中的啓動點字段。在我做完這些之後,簽名錯誤消失了,現在情況好轉了。顯然,工具使用者並沒有特意尋找index.anything文件,正如我所假設的那樣。