我有一个外部工具,我通过 LTI 连接到我的 D2L 站点。当学生完成作业时,我希望该工具将成绩发送回 LMS。在使用 XML 有效负载发送成绩时,我从 D2L 收到“未通过身份验证”消息。如何验证我的成绩发布?
问问题
685 次
1 回答
0
所需的身份验证取决于必须如何完成,如LTI 1.1 实施指南中所述。特别是(来自 LTI 1.1 impl guide),请注意第4 节:LTI 安全模型和第6.1 节:LTI 基本结果服务。
我相信需求的快速总结(根据第4.3 节:应用程序/xml 消息的安全性):
形成 POX (plain 'ol XML) body
计算body hash值
将参数设置
oauth_body_hash
为此值根据 Oauth 签名规则对请求进行签名,并注意
oauth_body_hash
必须包含在基本字符串中才能与其他请求参数一起签名在签名请求中传输
oauth_body_has
h 参数和 OAuth 参数
D2L强烈建议实施者为其特定平台使用可靠的 OAuth 标准库来进行签名生成和验证,而不是尝试自己实现 OAuth 签名/验证算法。
请注意,这种情况下的 Oauth 参数是在请求标头中传输的,而不是在正文数据中。IMS 规范本身包含一个主体应该是什么样子的示例(第 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>
于 2014-03-05T15:51:30.480 回答