LTI (Learning Tools Interoperability) †[edit]
- IMS グローバル ラーニング コンソーシアムが開発している ELシステム間の接続規格
jupyterhub-ltiauthenticator (Moodle - JupyterHub) †[edit]
v1.6.2 (2024/12/10 最新)[edit]
(jupyterhub)# pip install jupyterhub-ltiauthenticator==1.2.0
Moodle 側 †[edit]
- 管理者‘IDで,「サイト管理」=> 「プラグイン」=> 「外部ツール:ツールを管理する」(=>「ツールを手動設定する」)
- デフォルト起動コンテナは「新しいウィンドウ」にする.
- 埋め込み表示に設定した場合,chrome, edge では cookieが送信されないので,ログインできない(Firefox は可能 2021 9/3)
- SameSite=Lax であるため,iframe 使用時は Moodleのホストと JupyterHub のホストが異なる場合は cookie が送信されない.
- JupyterHub のソースコードを散々引っ掻き回して,ようやく理解した.
- error : module 'oauthlib.oauth1.rfc5849.signature' has no attribute 'signature_base_string' [#l6c7a130]
- ライブラリが足りない
一度 Moodle 経由でログインすると,ブラウザがアカウントを覚えているらしく,次回からは Moodle 経由で無くともログイン可能. ログアウトすればOK
- その他の一般ユーザ認証と併用できない.
OLD: v1.0.0 †[edit]
Learning Tools Interoperability †[edit]
- 既にインストールされている ltiauthenticator だと Moodle にログインできない.
- "Moodleと Jupyter Notebookの 連携 によるプログラミング 教育環境 の 構築" 石坂徹,桑田喜隆, et. al., Moodle Moot Japan 2019 Proceedings (2019), pp.32-37
- /usr/local/anaconda/envs/jupyterhub/lib/python3.8/site-packages/ltiauthenticator/__init__.py
152 # Before we return lti_user_id, check to see if a canvas_custom_user_id was sent.
153 # If so, this indicates two things:
154 # 1. The request was sent from Canvas, not edX
155 # 2. The request was sent from a Canvas course not running in anonymous mode
156 # If this is the case we want to use the canvas ID to allow grade returns through the Canvas API
157 # If Canvas is running in anonymous mode, we\'ll still want the \'user_id\' (which is the `lti_user_id``)
158
159 canvas_id = handler.get_body_argument('custom_canvas_user_id', default=None)
160 + product_code = handler.get_body_argument('tool_consumer_info_product_family_code', default=None)
161
162 if canvas_id is not None:
163 user_id = handler.get_body_argument('custom_canvas_user_id')
164 + elif 'moodle' in product_code:
165 + user_id = handler.get_body_argument('ext_user_username')
166 else:
167 user_id = handler.get_body_argument('user_id')
168
jupyterhub_config.py †[edit]
c.JupyterHub.authenticator_class = 'ltiauthenticator.LTIAuthenticator'
c.LTIAuthenticator.consumers = {
"b18e82ec683724743236fade71350720029a29144a585c66f6741d8e9c6e0d83" : "c0fe2924dbb0f4701d898d36aaf9fd89c7a3ed3a7db6f0003d0e825a7eccb41c"
}
- キーは二つとも openssl rand -hex 32 で生成.