ページ内コンテンツ
LTI (Learning Tools Interoperability)
- IMS グローバル ラーニング コンソーシアムが開発している ELシステム間の接続規格
jupyterhub-ltiauthenticator (Moodle - JupyterHub)
- 各種LMS - JupyterHub 接続
- LMS(Moodle) が TC(Tool Consumer),JupyterHub が TP(Tool Provider) としてうごく.
- see also. Moodle+JupyterHub
v1.3.0
- pip install jupyterhub-ltiauthenticator==1.3.0
- https://pypi.org/project/jupyterhub-ltiauthenticator/1.3.0/
jupyterhub_config.py
# for LTI v1.2.0 c.JupyterHub.authenticator_class = 'ltiauthenticator.LTIAuthenticator' c.LTI11Authenticator.consumers = { "b18e82ec683724743236fade71350720029a29144a585c66f6741d8e9c6e0d83" : "c0fe2924dbb0f4701d898d36aaf9fd89c7a3ed3a7db6f0003d0e825a7eccb41c" } c.LTI11Authenticator.username_key = 'ext_user_username'
Moodle 側
- 管理者‘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'
- ライブラリが足りない
- conda install oauthlib
- conda install oauthlib
欠点:利点?
一度 Moodle 経由でログインすると,ブラウザがアカウントを覚えているらしく,次回からは Moodle 経由で無くともログイン可能.ログアウトすればOK- その他の一般ユーザ認証と併用できない.
Learning Tools Interoperability
- 既にインストールされている 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
- /usr/local/anaconda/envs/jupyterhub/lib/python3.8/site-packages/ltiauthenticator/__init__.py
- "Moodleと Jupyter Notebookの 連携 によるプログラミング 教育環境 の 構築" 石坂徹,桑田喜隆, et. al., Moodle Moot Japan 2019 Proceedings (2019), pp.32-37
jupyterhub_config.py
c.JupyterHub.authenticator_class = 'ltiauthenticator.LTIAuthenticator' c.LTIAuthenticator.consumers = { "b18e82ec683724743236fade71350720029a29144a585c66f6741d8e9c6e0d83" : "c0fe2924dbb0f4701d898d36aaf9fd89c7a3ed3a7db6f0003d0e825a7eccb41c" }
- キーは二つとも openssl rand -hex 32 で生成.
- openssl rand -hex 32
- openssl rand -hex 32
Counter: 567,
today: 1,
yesterday: 1
最終更新: 2023-05-07 (日) 14:36:56 (JST) (491d) by iseki