LTI Consumer and multiple Blocks

Hi, I am trying to get LTI 1.3 to work with my JupyterHub instance. LTI 1.1 works fine, however I would like to use deep linking which only works with 1.3 in edX. (Deep linking is where the tool provides an UI to configure the link, so that you don’t have to manually configure parameters in the xblock).

Long story short, it seems there is a mismatch between how LTI 1.3 is implemented in edX and JupyterHub (via ltiauthenticator), but I am not sure which side is to blame :slight_smile:

  • In LTI 1.1, you set up a LTI passport once and reuse it in multiple blocks. But in TLI 1.3, you create a block, and it gives you a client ID, keyset URL and so on. The first problem is that JupyterHub requires you to edit its configuration file for this, but I don’t want to edit it every time an instructor adds a block. Is there a way to reuse the client ID for multiple blocks, like I could reuse the consumer key in LTI 1.1?

  • The second problem, even though JupyterHub allows multiple client IDs, you can only enter one JWKS endpoint (Keyset URL). It seems the assumption is that it should returns the keysets for all the connections, not just one. This could also be fixed by allowing one client ID for all blocks. Alternatively it could be fixed on the JupyterHub side by allowing one URL per ID (but I am not sure how to do the mapping exactly).

Did anybody get LTI 1.3 running successfully, or can illuminate what the “correct” behavior of a LTI 1.3 consumer would be? If there is some feature missing on either side I’d be willing to contribute some code, but I don’t know where to start…