LtiResourceLinkRequest requires roles claim and must contain at least one role URI from the published role vocabularies.
IMS 1.3 spec lists 3 role vocabularies (link ) but does NOT limit their use to specific conditions.
System roles
Institution roles
Context roles
Spec further subdivides each of these into core and non-core URIs.
In the launch claim example in the spec (link ), the roles claim contains 3 array elements, 1 from institution roles and 2 from context roles.
Claims in example link request from spec
"https://purl.imsglobal.org/spec/lti/claim/deployment_id":
"07940580-b309-415e-a37c-914d387c1150",
"https://purl.imsglobal.org/spec/lti/claim/message_type": "LtiResourceLinkRequest",
"https://purl.imsglobal.org/spec/lti/claim/version": "1.3.0",
==========================================================================
==========================================================================
"https://purl.imsglobal.org/spec/lti/claim/roles": [
"http://purl.imsglobal.org/vocab/lis/v2/institution/person#Student",
"http://purl.imsglobal.org/vocab/lis/v2/membership#Learner",
"http://purl.imsglobal.org/vocab/lis/v2/membership#Mentor"],
==========================================================================
==========================================================================
"https://purl.imsglobal.org/spec/lti/claim/role_scope_mentor": [
"fad5fb29-a91c-770-3c110-1e687120efd9",
"5d7373de-c76c-e2b-01214-69e487e2bd33",
"d779cfd4-bc7b-019-9bf1a-04bf1915d4d0"
],
"https://purl.imsglobal.org/spec/lti/claim/context": {
"id": "c1d887f0-a1a3-4bca-ae25-c375edcc131a",
"label": "ECON 1010",
"title": "Economics as a Social Science",
"type": ["http://purl.imsglobal.org/vocab/lis/v2/course#CourseOffering"]
},
"https://purl.imsglobal.org/spec/lti/claim/resource_link": {
"id": "200d101f-2c14-434a-a0f3-57c2a42369fd",
"description": "Assignment to introduce who you are",
"title": "Introduction Assignment"
},
"https://purl.imsglobal.org/spec/lti/claim/tool_platform": {
"guid": "ex/48bbb541-ce55-456e-8b7d-ebc59a38d435",
"contact_email": "support@platform.example.edu",
"description": "An Example Tool Platform",
"name": "Example Tool Platform",
"url": "https://platform.example.edu",
"product_family_code": "ExamplePlatformVendor-Product",
"version": "1.0"
},
"https://purl.imsglobal.org/spec/lti/claim/target_link_uri":
"https://tool.example.com/lti/48320/ruix8782rs",
"https://purl.imsglobal.org/spec/lti/claim/launch_presentation": {
"document_target": "iframe",
"height": 320,
"width": 240,
"return_url": "https://platform.example.edu/terms/201601/courses/7/sections/1/resources/2"
},
"https://purl.imsglobal.org/spec/lti/claim/custom": {
"xstart": "2017-04-21T01:00:00Z",
"request_url": "https://tool.com/link/123"
},
"https://purl.imsglobal.org/spec/lti/claim/lis": {
"person_sourcedid": "example.edu:71ee7e42-f6d2-414a-80db-b69ac2defd4",
"course_offering_sourcedid": "example.edu:SI182-F16",
"course_section_sourcedid": "example.edu:SI182-001-F16"
} Open edX implementation In the implementation here , we see 2 kinds of available mappings:
LTI_1P3_ROLE_MAP
LTI_1P3_CONTEXT_ROLE_MAP
Roles mapping in Open edX
LTI_1P3_ROLE_MAP = {
'staff': [
'http://purl.imsglobal.org/vocab/lis/v2/system/person#Administrator',
'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Instructor',
],
'instructor': [
'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Instructor',
],
'student': [
'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Student'
],
'guest': [
'http://purl.imsglobal.org/vocab/lis/v2/institution/person#Student'
],
}
# Context membership roles
# https://www.imsglobal.org/spec/lti/v1p3/#lis-vocabulary-for-context-roles
LTI_1P3_CONTEXT_ROLE_MAP = {
'staff': [
'http://purl.imsglobal.org/vocab/lis/v2/membership#Administrator',
],
'instructor': [
'http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor',
],
'student': [
'http://purl.imsglobal.org/vocab/lis/v2/membership#Learner',
],
} The following table is generated by performing launch of IMS global test suite with different course roles in Open edX.
Note that LTI_1P3_CONTEXT_ROLE_MAP does NOT seem to be used in roles claim at all.
Current URIs in roles claim
Current URIs in roles claim
Course Admin
/institution/person#Instructor (non-core)
Course Staff
/system/person#Administrator (core)
/institution/person#Instructor (non-core)
Limited Staff
/system/person#Administrator (core)
/institution/person#Instructor (non-core)
None
/institution/person#Student (core)
All other roles
/institution/person#Student (core)
This raises a few problems.
Problems 1. Limited support for core roles The spec states:
Core roles are those which are most likely to be relevant within LTI and hence vendors should support them by best practice. Vendors may also use the non-core roles, but they may not be widely used.
However, as we see in the table above, very few core roles are used. For example, Course Admin is mapped to only 1 role and that too is non-core.
2. Integration failure: TurnItIn Abstract Technology , an Open edX partner, tried integration with TurnItIn. They learned from the team at TurnItIn that the tool is looking for /membership#Learner in role claim in the LTI request with student role. But the platform’s request ONLY contains /institution/person#Student. So the launch fails.
Launch claims in IMS LTI 1.3 LtiResourceLinkRequest from Open edX Ulmo
{
"https://purl.imsglobal.org/spec/lti/claim/message_type": "LtiResourceLinkRequest",
"https://purl.imsglobal.org/spec/lti/claim/version": "1.3.0",
"https://purl.imsglobal.org/spec/lti/claim/deployment_id": "1",
"https://purl.imsglobal.org/spec/lti/claim/target_link_uri": "https://lti-ri.imsglobal.org/lti/tools/5878/launches",
"https://purl.imsglobal.org/spec/lti/claim/roles": [
"http://purl.imsglobal.org/vocab/lis/v2/institution/person#Student"
],
"https://purl.imsglobal.org/spec/lti/claim/resource_link": {
"id": "block-v1:edx+LTI101+2026+type@lti_consumer+block@cf1b149fc06d4bf2b568e626bb09415e"
},
"https://purl.imsglobal.org/spec/lti/claim/launch_presentation": {
"document_target": "iframe"
},
"https://purl.imsglobal.org/spec/lti/claim/context": {
"id": "course-v1:edx+LTI101+2026",
"type": [
"http://purl.imsglobal.org/vocab/lis/v2/course#CourseOffering"
],
"title": "LTI testing - aayub - edx",
"label": "course-v1:edx+LTI101+2026"
},
"https://purl.imsglobal.org/spec/lti/claim/tool_platform": {
"guid": "76834479-ae8b-5249-a190-842b90f777ee",
"name": "Ulmo"
},
"https://purl.imsglobal.org/spec/lti/claim/custom": {
"quiz_id": "az-123",
"duedate": "2026-02-08T07:09:21+00:00"
},
"https://purl.imsglobal.org/spec/lti-ags/claim/endpoint": {
"scope": [
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem",
"https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/score"
],
"lineitems": "https://ulmo.openedx.io/api/lti_consumer/v1/lti/7/lti-ags",
"lineitem": "https://ulmo.openedx.io/api/lti_consumer/v1/lti/7/lti-ags/11"
},
"https://purl.imsglobal.org/spec/lti-nrps/claim/namesroleservice": {
"context_memberships_url": "https://ulmo.openedx.io/api/lti_consumer/v1/lti/7/memberships",
"service_versions": [
"2.0"
]
}
} Proposed solution Following the spec, we should include at least core roles from all 3 vocabularies in the roles claim. This will enable TurnItIn integration and avoid potential problems with other tools.
Here’s the proposed new mapping. Including a non-core role /institution/person#Instructor will include backwards compatibility incase any tools have already adopted to Open edX’s use of this role.
System
/system/person#Administrator
/system/person#None
Institution
/institution/person#Administrator
/institution/person#Staff
/institution/person#Faculty
/institution/person#Student
/institution/person#Guest
/institution/person#Other
/institution/person#None
/institution/person#Instructor (non-core)
Membership
/membership#Administrator
/membership#Instructor
/membership#Mentor
/membership#ContentDeveloper
/membership#Learner
Another view for proposed mapping.
Proposed URIs in roles claim
Proposed URIs in roles claim
Course Admin
/system/person#Administrator (System - core)
/institution/person#Administrator (Institution - core)
/membership#Administrator (Membership - core)
/institution/person#Instructor (Institution - non-core)
Course Staff
/system/person#None (System - core)
/institution/person#Staff (Institution - core)
/institution/person#Faculty (Institution - core)
/membership#Instructor (Membership - core)
/system/person#Administrator (core)
/institution/person#Instructor (Institution - non-core)
Limited Staff
/system/person#None (System - core)
/institution/person#Staff (Institution - core)
/institution/person#Faculty (Institution - core)
/membership#Instructor (Membership - core)
/system/person#Administrator (core)
/institution/person#Instructor (Institution - non-core)
None
/system/person#None (System - core)
/institution/person#Student (Institution - core)
/membership#Learner (Membership - core)
All other roles
/system/person#None (System - core)
/institution/person#Student (Institution - core)
/membership#Learner (Membership - core)