2014-06-24 1 views
0

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과의 LTI 통합 문제

나는 내가 생각할 수있는 모든 것을 시도했다. 그리고 내가 한 번 작동하고 Desire2Learn에 내 학습 도구를 제대로로드 할 수 있었지만, 막 중단 한 것처럼 보이고 더 이상 알아 내지 못한다. 이 문제를 해결하기 위해 5 시간을 보냈습니다. POST 및 로컬 변수를 디버깅하고 Desire2Learn의 툴 제공자 및 링크 필드 안의 URL 필드에 다른 것들을 던지기 위해 echo'ing과 같은 시도를했습니다.

나는이 5 시간 동안 나는 인증 과정에서 서명이 다시 만들어지며, 키와 비밀 일치에도 불구하고 POST 데이터에서 보낸 [oauth_signature] 필드와 결코 일치하지 않는다고 생각했다. LMS에있는 사람들.

이것이 의미가 있다면, 나는 이미 너무 많은 시간을 보냈고 더 이상 똑바로 생각할 수 없으므로이 모든 것을 얻을 수있는 모든 도움에 감사드립니다. 고맙습니다!

편집 :

여기

컨텍스트 데이터 Desire2Learn의 인 print_r()는 I에 대해 유효성이있어 OAUTH 파라미터들과 함께 다시 전송하고, I 세트 아래 로컬 변수. POST 데이터가 처음 Desire2Learn에서 다시 보내진다

[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'; 

, $의 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; 

    } 

여기는 내가 다시 붙잡혀 있습니다. return 문이 반환되거나 $ parameters 배열의 서명 값이 $ signature와 일치하지 않으면 "잘못된 OAuth 서명"오류가 발생합니다. LMS에서 설정 한 '키'및 '비밀'필드가 위의 두 변수에서 설정 한 필드와 같으면 이해할 수 있습니다.

+0

"X를 시도했지만 제대로 작동하지 않습니다"는 유용한 질문이 아닙니다. * 무엇이 * 특히 작동하지 않습니까? 오류 메시지가 있습니까? 너는 그들을 고치려고 무엇을 했는가? 어떤 코드를 작성 했습니까? 나는 돕고 싶지만 나는 할 수 없다. – Alex

+0

죄송합니다. 설명하기가 조금 복잡해 보입니다. 내 질문을 편집하여 Desire2Learn에서 학습 도구로 전송되는 초기 POST 데이터를 제공하고 내가 인증해야하는 일부 OAUTH 변수를 포함합니다. oauth_signature 필드가 문제를 일으키는 것을 제외하면 모든 것이 잘된 것처럼 보입니다. – hRdCoder

+0

여기서 일어나는 일을 해결하는 것은 여전히 ​​매우 어렵습니다. 'CaclulateSignatureForFormUrlEncoded'의 전제 조건은 무엇입니까? 'CheckSignatureForFormUrlEncoded'의 전제 조건이 유지되고 있습니까? 이 중 어떤 것이 어딘가에서 왔습니까? 아니면 자신 만의 것을 굴리고 있습니까? – Alex

답변

0

좋아, 나는 그것을 알아 낸 것 같다. 바보처럼 들리 겠지만, Desire2Learn의 외부 학습 도구에 대한 링크의 URL 필드 끝 부분에 'index.php'를 추가하고 도구 제공 업체 구성의 실행 지점 필드를 추가해야했습니다. 내가 이것을 한 후에 서명 오류가 사라졌고 지금은 모두 나아졌습니다. 외관상으로는 공구 소비자는 색인을 위해 특별히 찾고 있지 않다. 나가 생각 했었던 것처럼 모두 아무 파일도.