我有一个外部工具,我通过LTI连接到我的D2L网站。当学生完成工作时,我希望该工具将成绩发送回LMS。 我收到了#34;未经过身份验证的"在使用XML有效负载发送成绩时来自D2L的消息。如何验证我的成绩发布?
答案 0 :(得分:0)
所需的身份验证取决于如何LTI 1.1 implementation guide中所述的必须执行的身份验证。特别是(来自LTI 1.1 impl指南),请注意4: LTI Security Model部分和6.1: LTI Basic Outcome Service部分。
我相信需求的快速摘要(根据4.3: Security for application/xml Messages部分):
组成POX(普通'ol XML)正文
计算正文哈希值
将oauth_body_hash
parm设置为此值
根据Oauth签名规则对请求进行签名,并注意oauth_body_hash
必须包含在基本字符串中以与其他请求参数一起签名
在已签名的请求中传输oauth_body_has
h parm以及OAuth parms
D2L 高度建议实施者使用可靠的OAuth标准库为其特定平台进行签名生成和验证,而不是尝试自行实施OAuth签名/验证算法。
请注意,在这种情况下,Oauth parms在请求标头中传输,而不是在正文数据中传输。 IMS规范本身包含一个身体应该是什么样子的例子(sec 4.3):
POST http://www.imsglobal.org/developers/BLTI/service_handle.php HTTP/1.0
Host: 127.0.0.1:80
Content-Length: 757
Authorization: OAuth realm="",oauth_version="1.0",
oauth_nonce="29f90c047a44b2ece73d00a09364d49b",
oauth_timestamp="1313350943",oauth_consumer_key="lmsng.school.edu",
oauth_body_hash="v%2BxFnmDSHV%2Fj29qhxLwkFILrtPo%3D",
oauth_signature_method="HMAC-SHA1",
oauth_signature="8auRpRdPY2KRXUrOyz3HKCs92y8%3D"
Content-type: application/xml
<?xml version = "1.0" encoding = "UTF-8"?>
<imsx_POXEnvelopeRequest xmlns = "http://www.imsglobal.org/services/ltiv1p1/xsd/imsoms_v1p0">
<imsx_POXHeader>
<imsx_POXRequestHeaderInfo>
<imsx_version>V1.0</imsx_version>
<imsx_messageIdentifier>999999123</imsx_messageIdentifier>
</imsx_POXRequestHeaderInfo>
</imsx_POXHeader>
<imsx_POXBody>
<readResultRequest>
<resultRecord>
<sourcedGUID>
<sourcedId>3124567</sourcedId>
</sourcedGUID>
</resultRecord>
</readResultRequest>
</imsx_POXBody>
</imsx_POXEnvelopeRequest>