The Instructure Community will enter a read-only state on November 22, 2025 as we prepare to migrate to our new Community platform in early December.
Read our blog post for more info about this change.
Found this content helpful? Log in or sign up to leave a like!
Hi,
I'm trying to follow the "link selection" placement (module) instructions here: https://canvas.instructure.com/doc/api/file.link_selection_placement.html and I'm having some issues. In the past I was able to set up the "editor button" placement using an XML config, but it seems the "link selection" one requires the JSON approach, so maybe I'm doing something wrong.
This is all done on my open source Canvas setup (dev environment), running the latest version of Canvas pulled from the github repo.
This is the JSON config (with security values changed):
{
"title": "LTI 1.3 test (MODULE)",
"scopes": [],
"extensions": [
{
"domain": "mydomain",
"tool_id": "deep-linky",
"platform": "canvas.instructure.com",
"settings": {
"text": "LTI 1.3 test (MODULE)",
"icon_url": "https://myiconurl.com/icon.png",
"placements": [
{
"text": "Embed Tool Content as a Canvas Module",
"enabled": true,
"icon_url": "https://myiconurl.com/icon.png",
"placement": "link_selection",
"message_type": "LtiDeepLinkingRequest",
"target_link_uri": "https://mydomain.com/lti/launch"
}
]
}
}
],
"public_jwk": {
"kty": "val",
"alg": "val",
"n": "val",
"use": "val",
"e": "val",
"kid": "val"
},
"description": "1.3 Test Tool DEV MODULE",
"target_link_uri": "https://mydomain.com/lti/launch",
"oidc_initiation_url": "https://mydomain.com/auth/openid_connect",
"custom_fields": {}
}So the thing is I'm not getting any errors at all when I create the LTI Key like this, it just doesn't show any placements when I'm adding the app to the course, and it also doesn't show when trying to add an external tool to the module.
I tried editing the previous tool that I had created via XML and just adding the "link_selection" placement to it, but that didn't work either. I also created a new tool from scratch and tried to add the Link Selection to it manually, but no luck.
Any ideas?
Solved! Go to Solution.
Huh. So I was adding the "app" directly into the course through the client id and that wasn't working. I tried going to the admin panel and then adding the app globally as an admin (also using client id) and that worked. I didn't really change anything on the app config. So strange. Thanks @svickers2 !
Nothing obvious jumps out at me with your configuration. Just two suggestions:
Stephen
Thanks @svickers2! All the "mydomain" instances are actually localhost:3000 pointing to my dev environment. I doubt that's it since in the XML version (for "editor_button" placement) localhost:3000 seemed to work.
Your second suggestion is throwing me for a loop, sorry. Is the JWKS endpoint /api/lti/security/jwks ? - the only refence I could find to JWKS endpoint in the API documentation is this one https://canvas.instructure.com/doc/api/public_jwk.html but there's no GET, just PUT.
Would you mind sharing a link that would explain how to go about your second suggestion? Sorry, I'm just getting started with Canvas & LTI 1.3. Thanks!
Yes, the JWKS endpoint is /api/lti/security/jwks. It should return at least one public key. If it doesn't it probably means that you have not defined a private key in your Canvas instance.
Thanks! Yes, it's returning a JSON set containing some keys, so apparently that's working.
I'll do some debugging and see if I can figure something out. Thanks!
Huh. So I was adding the "app" directly into the course through the client id and that wasn't working. I tried going to the admin panel and then adding the app globally as an admin (also using client id) and that worked. I didn't really change anything on the app config. So strange. Thanks @svickers2 !
Community helpTo interact with Panda Bot, our automated chatbot, you need to sign up or log in:
Sign inTo interact with Panda Bot, our automated chatbot, you need to sign up or log in:
Sign in