2015-04-08 2 views
1

Я работаю над Java веб-приложений и теперь я пытаюсь подключить мой веб-сайт с QTIWorksГенерация OAuth подписи в Java

У меня есть ключ потребителя и секрет, мне нужно сгенерировать OAuth подпись, чтобы связаться с QTIWorks через LTI

<html> 

<head> </head> 

<body> 
<form action="https://webapps.ph.ed.ac.uk/qtiworks-dev2/lti/domainlaunch" name="ltiLaunchForm" id="ltiLaunchForm" method="post" target="basicltiLaunchFrame" enctype="application/x-www-form-urlencoded" style="display: block;"> 
    <input type="hidden" name="context_id" value="cid-00113"> 
    <input type="hidden" name="context_label" value="SI106"> 
    <input type="hidden" name="context_title" value="Design of Personal Environments 1"> 
    <input type="hidden" name="ext_note" value="Instructor from first course"> 
    <input type="hidden" name="launch_presentation_locale" value="en_us"> 
    <input type="hidden" name="lis_person_contact_email_primary" value="[email protected]"> 
    <input type="hidden" name="lis_person_name_family" value="Instructor"> 
    <input type="hidden" name="lis_person_name_given" value="Siân"> 
    <input type="hidden" name="lis_person_sourcedid" value="school.edu:user"> 
    <input type="hidden" name="resource_link_description" value="This learning space is private"> 
    <input type="hidden" name="resource_link_id" value="res-0012612"> 
    <input type="hidden" name="resource_link_title" value="My Weekly Wiki"> 
    <input type="hidden" name="roles" value="Instructor"> 
    <input type="hidden" name="tool_consumer_info_product_family_code" value="sakai-unit"> 
    <input type="hidden" name="tool_consumer_info_version" value="0.9"> 
    <input type="hidden" name="tool_consumer_instance_description" value="University of School (LMSng)"> 
    <input type="hidden" name="tool_consumer_instance_guid" value="lmsng.school.edu"> 
    <input type="hidden" name="user_id" value="user-0016"> 
    <input type="hidden" name="oauth_callback" value="about:blank"> 
    <input type="hidden" name="lis_outcome_service_url" value="...."> 
    <input type="hidden" name="lis_result_sourcedid" value="{&quot;zap&quot; : &quot;Siân JSON 1234 Sourcedid <>&amp;lt;&quot;}"> 
    <input type="hidden" name="custom_simple_key" value="custom_simple_value"> 
    <input type="hidden" name="custom_complex____________key" value="[email protected]#$^*(){}[]½Value"> 
    <input type="hidden" name="lti_version" value="LTI-1p0"> 
    <input type="hidden" name="lti_message_type" value="basic-lti-launch-request"> 
    <input type="submit" name="ext_submit" value="Finish Launch"> 
    <input type="hidden" name="oauth_version" value="1.0"> 
    <input type="hidden" name="oauth_nonce" value="505005bff1c2cf2e1750ed914e489a9b"> 
    <input type="hidden" name="oauth_timestamp" value="1427022367"> 
    <input type="hidden" name="oauth_consumer_key" value="my consumer key"> 
    <input type="hidden" name="oauth_signature_method" value="HMAC-SHA1"> 
    <input type="hidden" name="oauth_signature" value="I need generate this value"> 
    <input type="hidden" name="ext_submit" value="Finish Launch"> 
    <input type="submit" name="submit" value="submit"></form> 


<iframe name="basicltiLaunchFrame" id="basicltiLaunchFrame" src="" width="100%" height="900" scrolling="auto" frameborder="1" transparency=""> 

</iframe> 
</body> 

Мне нужно создать OAuth подпись на этой линии

<input type="hidden" name="oauth_signature" value="I need generate this value"> 

Как я могу это сделать?

ответ

0

ли это с JavaScript:

document.getElementById("oauth_signature").value = "Value you want to generate"; 

Edit:

Вы можете использовать библиотеку для криптографических алгоритмов (например, https://code.google.com/p/crypto-js/) вычислить OAuth подпись:

var key = document.getElementById("oauth_consumer_key").value 
var hash = CryptoJS.SHA1(key); 
document.getElementById("oauth_signature").value = hash 

В зависимости от значение oauth_signature_method вы должны использовать соответствующий криптографический алгоритм.

switch(document.getElementById("oauth_signature_method").value) { 
    case "HMAC-SHA1": 
     var hash = CryptoJS.SHA1(key) 
     break; 
    case "HMAC-SHA-2": 
     var hash = CryptoJS.SHA256(key) 
     break; 
    case ... 
} 
+0

Это на самом деле не совсем правильно. Это не так просто, как просто запуск SHA-1 - вам нужно вычислить базовую строку на основе всех свойств в позе * и * URL-адреса, которые вы отправили, добавить ключ и секрет, вычислить подпись, а затем добавить подпись к данным сообщения. LTI 1.x использует OAuth 1.0a https://tools.ietf.org/html/rfc5849 для его подписания. – drchuck

0

Вы можете использовать код Sakai LTI (Open Source Apache), чтобы сделать подпись. Я извлек портативные биты реализации Sakai LTI по ​​адресу:

https://github.com/tsugiproject/tsugi-util

артефакт даже в Sonatype, так что вы можете добавить его в конфигурации Maven - документация в README в GitHub. То, что вы ищете два метода:

  • signProperties добавляет OAuth поля и подпись

  • postLaunchHTML Формирует форму HTML и автоматически подает его

https://github.com/tsugiproject/tsugi-util/blob/master/src/java/org/tsugi/basiclti/BasicLTIUtil.java

Методы имеют множество параметров, но таким образом они очень независимы от любого хранилища или другого aspe cts вашего Java-приложения.

Смежные вопросы