https://d2l.nl.edu/shared/HelpFiles/10%20Administrator%20Help/learningenvironment/basic_lti_standards_support/org_level_lti_configuration.html 및 http://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에서 설정 한 '키'및 '비밀'필드가 위의 두 변수에서 설정 한 필드와 같으면 이해할 수 있습니다.
"X를 시도했지만 제대로 작동하지 않습니다"는 유용한 질문이 아닙니다. * 무엇이 * 특히 작동하지 않습니까? 오류 메시지가 있습니까? 너는 그들을 고치려고 무엇을 했는가? 어떤 코드를 작성 했습니까? 나는 돕고 싶지만 나는 할 수 없다. – Alex
죄송합니다. 설명하기가 조금 복잡해 보입니다. 내 질문을 편집하여 Desire2Learn에서 학습 도구로 전송되는 초기 POST 데이터를 제공하고 내가 인증해야하는 일부 OAUTH 변수를 포함합니다. oauth_signature 필드가 문제를 일으키는 것을 제외하면 모든 것이 잘된 것처럼 보입니다. – hRdCoder
여기서 일어나는 일을 해결하는 것은 여전히 매우 어렵습니다. 'CaclulateSignatureForFormUrlEncoded'의 전제 조건은 무엇입니까? 'CheckSignatureForFormUrlEncoded'의 전제 조건이 유지되고 있습니까? 이 중 어떤 것이 어딘가에서 왔습니까? 아니면 자신 만의 것을 굴리고 있습니까? – Alex