LTI を介して D2L サイトに接続した外部ツールがあります。生徒が作業を完了したら、ツールで成績を LMS に送り返すようにしたいと考えています。XML ペイロードで成績を送信すると、D2L から「認証されていません」というメッセージが表示されます。成績の投稿を認証するにはどうすればよいですか?
1 に答える
必要な認証は、LTI 1.1 実装ガイドで説明されている方法に依存します。特に (LTI 1.1 impl ガイドから)、セクション4: LTI Security Modelとセクション6.1: LTI Basic Outcome Serviceに注意してください。
要件の簡単な要約、私は信じています (セクション4.3: Security for application/xml Messagesに従って):
POX (plain 'ol XML) 本体を形成する
ボディハッシュ値を計算する
oauth_body_hash
パラメータをこの値に設定しますOauth 署名ルールに従ってリクエストに署名します。他のリクエスト パラメータと一緒に署名するには、ベース文字列に を含める
oauth_body_hash
必要があることに注意してください。oauth_body_has
署名付きリクエストで OAuth パラメーターとともに h パラメーターを送信する
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>