1

我有一个外部工具,我通过 LTI 连接到我的 D2L 站点。当学生完成作业时,我希望该工具将成绩发送回 LMS。在使用 XML 有效负载发送成绩时,我从 D2L 收到“未通过身份验证”消息。如何验证我的成绩发布?

4

1 回答 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_hash 参数和 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 回答