Skip to content

LTI 1.3 — certification dossier

Generated by bun run conformance:render — do not edit by hand.

Point-by-point certification submission: every conformance requirement against the literal published schema (conform-ed ADR-0013), with emergent’s implementation status, the spec citation, the modelled schema anchors, and the verifying evidence (emergent ADR-0028).

  • Denominator: pinned Coverage Map docs/conformance/maps/lti-v1.3.json (generated 2026-06-25), sha256 87e91f61bdca01da1f583d10da7bb72e5d77ef25836ca24f1352144997b8c06a.
  • Requirements: 54/56 done across 13 profile(s) — ags, core, deep-linking, nrps, platform-ags, platform-core, platform-deep-linking, platform-dynamic-registration, platform-nrps, platform-proctoring, platform-security, proctoring, security.
  • Information model: 189/270 literal items modelled; 13 transport-axis items (operations / parameters / security).
  • Evidence: each claim cites its [covers:] evidence key; run bun run conformance:prove to resolve these to the proving test names for a submission copy.
Req Level Status Statement Verified by / justification Spec source
LTI-AGS-1 MUST ✅ done A tool reads the AGS endpoint claim — the lineitems URL and the scopes it was granted (lineitem, lineitem.readonly, result.readonly, score) — and restricts itself to those scopes. (The claim is an LTI launch claim, not part of the AGS OpenAPI, so it has no schema anchor here.) lti:1.3:conf:ags/LTI-AGS-1 LTI AGS 2.0 §3.1 (the AGS claim) — https://www.imsglobal.org/spec/lti-ags/v2p0
LTI-AGS-2 MUST ✅ done A line item MUST carry a label (the gradebook-column title) and a scoreMaximum. lti:1.3:conf:ags/LTI-AGS-2 LTI AGS 2.0 §3.2.7 (label) / §3.2.8 (scoreMaximum) — https://www.imsglobal.org/spec/lti-ags/v2p0
LTI-AGS-3 MUST ✅ done A line item is identified by an id URL present on all responses, and MAY bind to a resource link (resourceLinkId) and a tool resource (resourceId). lti:1.3:conf:ags/LTI-AGS-3 LTI AGS 2.0 §3.2.3 (line item id) / §3.2.9 / §3.2.10 — https://www.imsglobal.org/spec/lti-ags/v2p0
LTI-AGS-4 MUST ✅ done The line item container (GET /lineitems) returns a paged array of line items, filterable by resource_link_id, resource_id and tag and paged by limit/page. lti:1.3:conf:ags/LTI-AGS-4 LTI AGS 2.0 §3.2 / §3.2.4 (container request filters) — https://www.imsglobal.org/spec/lti-ags/v2p0
LTI-AGS-5 MUST ✅ done A tool publishes a score by POSTing to the scores endpoint; the Score MUST carry userId, activityProgress, gradingProgress and timestamp. lti:1.3:conf:ags/LTI-AGS-5 LTI AGS 2.0 §3.4 (score publish service) — https://www.imsglobal.org/spec/lti-ags/v2p0
LTI-AGS-6 MUST ✅ done When scoreGiven is present it MUST be accompanied by scoreMaximum (the scale it is given in). lti:1.3:conf:ags/LTI-AGS-6 LTI AGS 2.0 §3.4.4 (scoreGiven and scoreMaximum) — https://www.imsglobal.org/spec/lti-ags/v2p0
LTI-AGS-7 MUST ✅ done The result container (GET …/results, filterable by user_id) returns results; a Result references its line item (scoreOf), the user (userId) and the achieved and maximum scores (resultScore / resultMaximum). lti:1.3:conf:ags/LTI-AGS-7 LTI AGS 2.0 §3.3 (result service) — https://www.imsglobal.org/spec/lti-ags/v2p0
LTI-AGS-8 MUST ✅ done A tool manages line items over the full REST surface: create (POST /lineitems) and read/update/delete the single line item (GET/PUT/DELETE …/lineitems/{lineItemId}). lti:1.3:conf:ags/LTI-AGS-8 LTI AGS 2.0 §3.2.3 / §3.2.5 / §3.2.6 (line item endpoints) — https://www.imsglobal.org/spec/lti-ags/v2p0
Modelled schema anchors
  • LTI-AGS-1
  • LTI-AGS-2lti:1.3:def:LineItem/label, lti:1.3:def:LineItem/scoreMaximum
  • LTI-AGS-3lti:1.3:def:LineItem/id, lti:1.3:def:LineItem/resourceLinkId, lti:1.3:def:LineItem/resourceId
  • LTI-AGS-4lti:1.3:def:LineItemContainer, lti:1.3:path:ags/GET /{contextId}/lineitems, lti:1.3:param:resource_link_id, lti:1.3:param:resource_id, lti:1.3:param:tag, lti:1.3:param:limit, lti:1.3:param:page
  • LTI-AGS-5lti:1.3:def:Score/userId, lti:1.3:def:Score/activityProgress, lti:1.3:def:Score/gradingProgress, lti:1.3:def:Score/timestamp, lti:1.3:path:ags/POST /{contextId}/lineitems/{lineItemId}/scores
  • LTI-AGS-6lti:1.3:def:Score/scoreGiven, lti:1.3:def:Score/scoreMaximum
  • LTI-AGS-7lti:1.3:def:ResultContainer, lti:1.3:def:Result/scoreOf, lti:1.3:def:Result/userId, lti:1.3:def:Result/resultScore, lti:1.3:def:Result/resultMaximum, lti:1.3:path:ags/GET /{contextId}/lineitems/{lineItemId}/results, lti:1.3:param:user_id
  • LTI-AGS-8lti:1.3:path:ags/POST /{contextId}/lineitems, lti:1.3:path:ags/GET /{contextId}/lineitems/{lineItemId}, lti:1.3:path:ags/PUT /{contextId}/lineitems/{lineItemId}, lti:1.3:path:ags/DELETE /{contextId}/lineitems/{lineItemId}
Req Level Status Statement Verified by / justification Spec source
LTI-CORE-1 MUST ✅ done A tool MUST implement the OpenID Connect third-party-initiated login: on the login initiation it returns an authentication request to the platform’s authorization endpoint. Every launch follows OIDC — there are no exceptions. lti:1.3:conf:core/LTI-CORE-1 LTI Core 1.3 §5.1.1 (OIDC login) / Advantage Cert §4.2.2 — https://www.imsglobal.org/spec/lti/v1p3/cert/
LTI-CORE-2 MUST ✅ done A tool MUST validate the id_token: a JWT signed (RS256) with the platform key resolved via its JWKS, with valid iss, aud, exp and iat, and the nonce the tool issued — rejecting any that fail. lti:1.3:conf:core/LTI-CORE-2 1EdTech Security Framework 1.1 §5.1.3 / LTI Core 1.3 §5.1.3 — https://www.imsglobal.org/spec/security/v1p1
LTI-CORE-3 MUST ✅ done A resource-link launch MUST carry the required claims: message_type=LtiResourceLinkRequest, version=1.3.0, the deployment_id, the target_link_uri, and the resource_link claim with an id. lti:1.3:conf:core/LTI-CORE-3 LTI Core 1.3 §4.2 (required message claims) / §5 — https://www.imsglobal.org/spec/lti/v1p3/
LTI-CORE-4 MUST ✅ done The launch MUST carry the roles claim (an array of role URIs) binding the user to the context; the tool authorizes from it. lti:1.3:conf:core/LTI-CORE-4 LTI Core 1.3 §5.3.3 (roles claim) — https://www.imsglobal.org/spec/lti/v1p3/
LTI-CORE-5 MUST ✅ done A tool MUST reject a launch missing a required claim, carrying the wrong LTI version, with an invalid iat/exp, or whose JWT signature or kid does not verify. lti:1.3:conf:core/LTI-CORE-5 LTI Advantage Cert §6.1.1 (known-bad payloads) — https://www.imsglobal.org/spec/lti/v1p3/cert/
Modelled schema anchors
  • LTI-CORE-1
  • LTI-CORE-2
  • LTI-CORE-3lti:1.3:doc:CoreLaunchRequest/messageType, lti:1.3:doc:CoreLaunchRequest/version, lti:1.3:doc:CoreLaunchRequest/deploymentId, lti:1.3:doc:CoreLaunchRequest/targetLinkUri, lti:1.3:def:ClResourceLink/id
  • LTI-CORE-4lti:1.3:doc:RoleVocabulary/role
  • LTI-CORE-5
Req Level Status Statement Verified by / justification Spec source
LTI-DL-1 MUST ✅ done A LtiDeepLinkingRequest carries the deep_linking_settings claim with deep_link_return_url, accept_types and accept_presentation_document_targets. lti:1.3:conf:deep-linking/LTI-DL-1 LTI Deep Linking 2.0 §4.4 (deep linking settings) — https://www.imsglobal.org/spec/lti-dl/v2p0
LTI-DL-2 MUST ✅ done The request lti_message_type MUST be LtiDeepLinkingRequest and the tool’s reply LtiDeepLinkingResponse. lti:1.3:conf:deep-linking/LTI-DL-2 LTI Deep Linking 2.0 §4.4.2 / §4.5 (message types) — https://www.imsglobal.org/spec/lti-dl/v2p0
LTI-DL-3 MUST ✅ done The tool returns the selection as a signed JWT carrying the content_items claim (a JSON array of the selected content items: ltiResourceLink, link, file, html or image). lti:1.3:conf:deep-linking/LTI-DL-3 LTI Deep Linking 2.0 §3 / §4.5.6 (content items) — https://www.imsglobal.org/spec/lti-dl/v2p0
LTI-DL-4 MUST ✅ done After encoding the response JWT the tool MUST redirect the workflow to the deep_link_return_url via an auto-submitted form. lti:1.3:conf:deep-linking/LTI-DL-4 LTI Deep Linking 2.0 §2.3 (redirect back) — https://www.imsglobal.org/spec/lti-dl/v2p0
Modelled schema anchors
  • LTI-DL-1lti:1.3:doc:DeepLinkingSettings/deepLinkReturnUrl, lti:1.3:doc:DeepLinkingSettings/acceptTypes, lti:1.3:doc:DeepLinkingSettings/acceptPresentationDocumentTargets
  • LTI-DL-2
  • LTI-DL-3lti:1.3:doc:DeepLinkingContentItem, lti:1.3:def:DlHtml/html, lti:1.3:def:DlImage/width, lti:1.3:def:DlImage/height, lti:1.3:def:DlFile/mediaType, lti:1.3:def:DlFile/expiresAt
  • LTI-DL-4
Req Level Status Statement Verified by / justification Spec source
LTI-NRPS-1 MUST ✅ done A tool consumes the NRPS claim (context_memberships_url + service_versions) from the launch to locate the membership service. lti:1.3:conf:nrps/LTI-NRPS-1 LTI NRPS 2.0 §2 (the names and role service claim) — https://www.imsglobal.org/spec/lti-nrps/v2p0
LTI-NRPS-2 MUST ✅ done A tool retrieves the membership container (media type application/vnd.ims.lti-nrps.v2.membershipcontainer+json) via GET on the context membership URL, following Link-header paging. lti:1.3:conf:nrps/LTI-NRPS-2 LTI NRPS 2.0 §2.1 (membership container) — https://www.imsglobal.org/spec/lti-nrps/v2p0
LTI-NRPS-3 MUST ✅ done Each member carries a user_id (the launch sub) and a roles array; a member with status Inactive/Deleted MUST be honoured (not treated as active). lti:1.3:conf:nrps/LTI-NRPS-3 LTI NRPS 2.0 §4.2 (membership / member status) — https://www.imsglobal.org/spec/lti-nrps/v2p0
LTI-NRPS-4 MUST ✅ done The membership request MUST be authorized by an OAuth 2.0 access token bearing the scope https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly. lti:1.3:conf:nrps/LTI-NRPS-4 LTI NRPS 2.0 §3 (accessing the service) — https://www.imsglobal.org/spec/lti-nrps/v2p0
Modelled schema anchors
  • LTI-NRPS-1
  • LTI-NRPS-2lti:1.3:doc:NrpsMembershipContainer, lti:1.3:doc:NrpsMembershipContainer/members
  • LTI-NRPS-3lti:1.3:def:NrpsMember/userId, lti:1.3:def:NrpsMember/roles, lti:1.3:def:NrpsMember/status
  • LTI-NRPS-4
Req Level Status Statement Verified by / justification Spec source
PLAT-AGS-1 MUST ✅ done A platform MUST include the AGS endpoint claim (the lineitems URL and the granted scopes) in launches, and MUST enforce that a tool’s service calls stay within the scopes it was granted. lti:1.3:conf:platform-ags/PLAT-AGS-1 LTI AGS 2.0 §3.1 (the AGS claim) — https://www.imsglobal.org/spec/lti-ags/v2p0
PLAT-AGS-2 MUST ✅ done A platform MUST accept line item creation (POST /lineitems), requiring a label (the gradebook-column title) and a scoreMaximum. lti:1.3:conf:platform-ags/PLAT-AGS-2 LTI AGS 2.0 §3.2 (line item create) / §3.2.7 / §3.2.8 — https://www.imsglobal.org/spec/lti-ags/v2p0
PLAT-AGS-3 MUST ✅ done A platform MUST assign each line item an id URL returned on every response, and MUST honour a binding to a resource link (resourceLinkId) and a tool resource (resourceId). lti:1.3:conf:platform-ags/PLAT-AGS-3 LTI AGS 2.0 §3.2.3 / §3.2.9 / §3.2.10 — https://www.imsglobal.org/spec/lti-ags/v2p0
PLAT-AGS-4 MUST ✅ done A platform MUST serve the line item container (GET /lineitems) as a paged array, filterable by resource_link_id, resource_id and tag and paged by limit/page. lti:1.3:conf:platform-ags/PLAT-AGS-4 LTI AGS 2.0 §3.2 / §3.2.4 (container request filters) — https://www.imsglobal.org/spec/lti-ags/v2p0
PLAT-AGS-5 MUST ✅ done A platform MUST accept a score POSTed to the scores endpoint, requiring userId, activityProgress, gradingProgress and timestamp. lti:1.3:conf:platform-ags/PLAT-AGS-5 LTI AGS 2.0 §3.4 (score publish service) — https://www.imsglobal.org/spec/lti-ags/v2p0
PLAT-AGS-6 MUST ✅ done When an accepted score carries scoreGiven the platform MUST require scoreMaximum (the scale it is given in) alongside it. lti:1.3:conf:platform-ags/PLAT-AGS-6 LTI AGS 2.0 §3.4.4 (scoreGiven and scoreMaximum) — https://www.imsglobal.org/spec/lti-ags/v2p0
PLAT-AGS-7 MUST ✅ done A platform MUST serve the result container (GET …/results, filterable by user_id); each Result references its line item (scoreOf), the user (userId) and the achieved and maximum scores (resultScore / resultMaximum). lti:1.3:conf:platform-ags/PLAT-AGS-7 LTI AGS 2.0 §3.3 (result service) — https://www.imsglobal.org/spec/lti-ags/v2p0
PLAT-AGS-8 MUST ✅ done A platform MUST serve the full single-line-item REST surface: read, update and delete the line item (GET/PUT/DELETE …/lineitems/{lineItemId}). lti:1.3:conf:platform-ags/PLAT-AGS-8 LTI AGS 2.0 §3.2.3 / §3.2.5 / §3.2.6 (line item endpoints) — https://www.imsglobal.org/spec/lti-ags/v2p0
Modelled schema anchors
  • PLAT-AGS-1
  • PLAT-AGS-2lti:1.3:def:LineItem/label, lti:1.3:def:LineItem/scoreMaximum, lti:1.3:path:ags/POST /{contextId}/lineitems
  • PLAT-AGS-3lti:1.3:def:LineItem/id, lti:1.3:def:LineItem/resourceLinkId, lti:1.3:def:LineItem/resourceId
  • PLAT-AGS-4lti:1.3:def:LineItemContainer, lti:1.3:path:ags/GET /{contextId}/lineitems, lti:1.3:param:resource_link_id, lti:1.3:param:resource_id, lti:1.3:param:tag, lti:1.3:param:limit, lti:1.3:param:page
  • PLAT-AGS-5lti:1.3:def:Score/userId, lti:1.3:def:Score/activityProgress, lti:1.3:def:Score/gradingProgress, lti:1.3:def:Score/timestamp, lti:1.3:path:ags/POST /{contextId}/lineitems/{lineItemId}/scores
  • PLAT-AGS-6lti:1.3:def:Score/scoreGiven, lti:1.3:def:Score/scoreMaximum
  • PLAT-AGS-7lti:1.3:def:ResultContainer, lti:1.3:def:Result/scoreOf, lti:1.3:def:Result/userId, lti:1.3:def:Result/resultScore, lti:1.3:def:Result/resultMaximum, lti:1.3:path:ags/GET /{contextId}/lineitems/{lineItemId}/results, lti:1.3:param:user_id
  • PLAT-AGS-8lti:1.3:path:ags/GET /{contextId}/lineitems/{lineItemId}, lti:1.3:path:ags/PUT /{contextId}/lineitems/{lineItemId}, lti:1.3:path:ags/DELETE /{contextId}/lineitems/{lineItemId}
Req Level Status Statement Verified by / justification Spec source
PLAT-CORE-1 MUST ✅ done A platform MUST implement the OpenID Connect third-party-initiated login flow: it exposes a login-initiation endpoint and, on the tool’s authentication request, returns the signed id_token launch to the tool’s registered redirect_uri. lti:1.3:conf:platform-core/PLAT-CORE-1 LTI Core 1.3 §5.1.1 (OIDC login) / Advantage Cert §4.2.2 — https://www.imsglobal.org/spec/lti/v1p3/cert/
PLAT-CORE-2 MUST ✅ done A platform MUST mint the id_token as a JWT signed RS256 with the platform key (resolvable via the platform’s JWKS), carrying iss (the platform issuer), aud (the tool’s client_id), sub (the user), exp and iat, and the nonce from the authentication request. lti:1.3:conf:platform-core/PLAT-CORE-2 1EdTech Security Framework 1.1 §5.1.3 / LTI Core 1.3 §5.1.3 — https://www.imsglobal.org/spec/security/v1p1
PLAT-CORE-3 MUST ✅ done A resource-link launch the platform issues MUST carry the required claims: message_type=LtiResourceLinkRequest, version=1.3.0, the deployment_id, the target_link_uri, and the resource_link claim with an id. lti:1.3:conf:platform-core/PLAT-CORE-3 LTI Core 1.3 §4.2 (required message claims) / §5 — https://www.imsglobal.org/spec/lti/v1p3/
PLAT-CORE-4 MUST ✅ done The launch the platform issues MUST carry the roles claim (an array of role URIs from the LTI vocabulary) binding the user to the context. lti:1.3:conf:platform-core/PLAT-CORE-4 LTI Core 1.3 §5.3.3 (roles claim) — https://www.imsglobal.org/spec/lti/v1p3/
PLAT-CORE-5 MUST ✅ done A platform MUST issue only well-formed launches — never one missing a required claim, carrying the wrong LTI version, or with an invalid iat/exp — and MUST sign every launch with its private key. lti:1.3:conf:platform-core/PLAT-CORE-5 LTI Advantage Cert §4.2 / §6.1 (well-formed launches) — https://www.imsglobal.org/spec/lti/v1p3/cert/
Modelled schema anchors
  • PLAT-CORE-1
  • PLAT-CORE-2
  • PLAT-CORE-3lti:1.3:doc:CoreLaunchRequest/messageType, lti:1.3:doc:CoreLaunchRequest/version, lti:1.3:doc:CoreLaunchRequest/deploymentId, lti:1.3:doc:CoreLaunchRequest/targetLinkUri, lti:1.3:def:ClResourceLink/id
  • PLAT-CORE-4lti:1.3:doc:RoleVocabulary/role
  • PLAT-CORE-5

Profile: platform-deep-linking — 4/4 done

Section titled “Profile: platform-deep-linking — 4/4 done”
Req Level Status Statement Verified by / justification Spec source
PLAT-DL-1 MUST ✅ done A platform MUST issue a LtiDeepLinkingRequest carrying the deep_linking_settings claim with deep_link_return_url, accept_types and accept_presentation_document_targets. lti:1.3:conf:platform-deep-linking/PLAT-DL-1 LTI Deep Linking 2.0 §4.4 (deep linking settings) — https://www.imsglobal.org/spec/lti-dl/v2p0
PLAT-DL-2 MUST ✅ done The platform’s request lti_message_type MUST be LtiDeepLinkingRequest and it MUST accept the tool’s reply as LtiDeepLinkingResponse. lti:1.3:conf:platform-deep-linking/PLAT-DL-2 LTI Deep Linking 2.0 §4.4.2 / §4.5 (message types) — https://www.imsglobal.org/spec/lti-dl/v2p0
PLAT-DL-3 MUST ✅ done A platform MUST accept the tool’s signed response JWT, validating the content_items claim and each selected content item (ltiResourceLink, link, file, html or image) before placing it. lti:1.3:conf:platform-deep-linking/PLAT-DL-3 LTI Deep Linking 2.0 §3 / §4.5.6 (content items) — https://www.imsglobal.org/spec/lti-dl/v2p0
PLAT-DL-4 MUST ✅ done A platform MUST receive the tool’s deep-linking response at the deep_link_return_url it advertised and persist the selected content items as placements in the originating context. lti:1.3:conf:platform-deep-linking/PLAT-DL-4 LTI Deep Linking 2.0 §2.3 (return to platform) — https://www.imsglobal.org/spec/lti-dl/v2p0
Modelled schema anchors
  • PLAT-DL-1lti:1.3:doc:DeepLinkingSettings/deepLinkReturnUrl, lti:1.3:doc:DeepLinkingSettings/acceptTypes, lti:1.3:doc:DeepLinkingSettings/acceptPresentationDocumentTargets
  • PLAT-DL-2
  • PLAT-DL-3lti:1.3:doc:DeepLinkingContentItem, lti:1.3:def:DlHtml/html, lti:1.3:def:DlImage/width, lti:1.3:def:DlImage/height, lti:1.3:def:DlFile/mediaType, lti:1.3:def:DlFile/expiresAt
  • PLAT-DL-4

Profile: platform-dynamic-registration — 2/2 done

Section titled “Profile: platform-dynamic-registration — 2/2 done”
Req Level Status Statement Verified by / justification Spec source
PLAT-DR-1 MUST ✅ done A platform supporting Dynamic Registration MUST expose an OpenID Connect openid-configuration document advertising its issuer, the authorization/token/JWKS endpoints, the registration endpoint and the LTI platform capabilities it offers. lti:1.3:conf:platform-dynamic-registration/PLAT-DR-1 LTI Dynamic Registration 1.0 §3.2 (platform configuration) — https://www.imsglobal.org/spec/lti-dr/v1p0
PLAT-DR-2 MUST ✅ done A platform MUST accept a tool’s registration request at the registration endpoint (bearer registration access token) and return the registered client configuration — the assigned client_id and the negotiated LTI tool configuration. lti:1.3:conf:platform-dynamic-registration/PLAT-DR-2 LTI Dynamic Registration 1.0 §3.5 / §3.6 (registration request/response) — https://www.imsglobal.org/spec/lti-dr/v1p0
Modelled schema anchors
  • PLAT-DR-1
  • PLAT-DR-2
Req Level Status Statement Verified by / justification Spec source
PLAT-NRPS-1 MUST ✅ done A platform MUST include the NRPS claim (context_memberships_url + service_versions) in launches for contexts where the membership service is available. lti:1.3:conf:platform-nrps/PLAT-NRPS-1 LTI NRPS 2.0 §2 (the names and role service claim) — https://www.imsglobal.org/spec/lti-nrps/v2p0
PLAT-NRPS-2 MUST ✅ done A platform MUST serve the membership container (media type application/vnd.ims.lti-nrps.v2.membershipcontainer+json) on GET of the context membership URL, paging with the Link header when the roster spans pages. lti:1.3:conf:platform-nrps/PLAT-NRPS-2 LTI NRPS 2.0 §2.1 (membership container) — https://www.imsglobal.org/spec/lti-nrps/v2p0
PLAT-NRPS-3 MUST ✅ done Each member the platform serves MUST carry a user_id (the same value as the launch sub) and a roles array, and an inactive/withdrawn member MUST be marked with the appropriate status rather than omitted silently. lti:1.3:conf:platform-nrps/PLAT-NRPS-3 LTI NRPS 2.0 §4.2 (membership / member status) — https://www.imsglobal.org/spec/lti-nrps/v2p0
PLAT-NRPS-4 MUST ✅ done A platform MUST require the membership request to bear an OAuth 2.0 access token with the scope https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly, rejecting an unscoped or unauthorized read. lti:1.3:conf:platform-nrps/PLAT-NRPS-4 LTI NRPS 2.0 §3 (accessing the service) — https://www.imsglobal.org/spec/lti-nrps/v2p0
Modelled schema anchors
  • PLAT-NRPS-1
  • PLAT-NRPS-2lti:1.3:doc:NrpsMembershipContainer, lti:1.3:doc:NrpsMembershipContainer/members
  • PLAT-NRPS-3lti:1.3:def:NrpsMember/userId, lti:1.3:def:NrpsMember/roles, lti:1.3:def:NrpsMember/status
  • PLAT-NRPS-4
Req Level Status Statement Verified by / justification Spec source
PLAT-PROC-1 MUST ✅ done A platform MUST send the LtiStartProctoring message (with the proctoring settings and the start_assessment_url) to the proctoring tool, and accept the tool’s launch of the assessment via that start_assessment_url. lti:1.3:conf:platform-proctoring/PLAT-PROC-1 LTI Proctoring Services 1.0 §4 (start proctoring) — https://www.imsglobal.org/spec/proctoring/v1p0
PLAT-PROC-2 MUST ✅ done A platform MUST accept the LtiEndAssessment message returning control at the end of the attempt (and MAY honour an Assessment Control Service verdict during it). lti:1.3:conf:platform-proctoring/PLAT-PROC-2 LTI Proctoring Services 1.0 §5 (end assessment / ACS) — https://www.imsglobal.org/spec/proctoring/v1p0
Modelled schema anchors
  • PLAT-PROC-1lti:1.3:doc:StartProctoringMessage/startAssessmentUrl, lti:1.3:doc:StartProctoringMessage/assessmentProctoringSettings
  • PLAT-PROC-2lti:1.3:doc:EndAssessmentMessage/messageType, lti:1.3:doc:EndAssessmentMessage/attemptNumber
Req Level Status Statement Verified by / justification Spec source
PLAT-SEC-1 MUST ✅ done All JWT signing MUST use asymmetric RSA-256; the platform signs the id_token only with its private key (symmetric cryptosystems are forbidden). lti:1.3:conf:platform-security/PLAT-SEC-1 LTI Advantage Cert §4.2 (security requirements) — https://www.imsglobal.org/spec/lti/v1p3/cert/
PLAT-SEC-2 MUST ➖ n/a All communication endpoints MUST be secured with TLS (SSL alone is forbidden). TLS termination/enforcement is handled at the Istio ingress / Gateway API tier (infra), not in app code — there is no application-level conformance surface to prove here (identical to the tool-role LTI-SEC-2). Revisit if the platform ever terminates TLS itself. LTI Advantage Cert §4.2 (TLS) — https://www.imsglobal.org/spec/lti/v1p3/cert/
PLAT-SEC-3 MUST ✅ done A platform MUST expose its public keys for tools to verify the id_token signature — a JWKS URL resolving the kid of every issued launch. lti:1.3:conf:platform-security/PLAT-SEC-3 LTI Advantage Cert §4.2.2.1 (JWKS exchange) — https://www.imsglobal.org/spec/lti/v1p3/cert/
PLAT-SEC-4 MUST ✅ done A platform MUST operate an OAuth 2.0 token endpoint accepting the client-credentials grant with private_key_jwt client authentication: it verifies the tool’s signed client-assertion against the tool’s registered JWKS, checks the requested scopes, and issues a scoped access token. lti:1.3:conf:platform-security/PLAT-SEC-4 1EdTech Security Framework 1.1 §4 (client-credentials grant / private_key_jwt) — https://www.imsglobal.org/spec/security/v1p1
Modelled schema anchors
  • PLAT-SEC-1
  • PLAT-SEC-2
  • PLAT-SEC-3
  • PLAT-SEC-4
Req Level Status Statement Verified by / justification Spec source
LTI-PROC-1 MUST ✅ done A proctoring tool receives the LtiStartProctoring message (with the proctoring_settings and the start_assessment_url) and only launches the assessment via the start_assessment_url once proctoring setup completes. lti:1.3:conf:proctoring/LTI-PROC-1 LTI Proctoring Services 1.0 §4 (start proctoring) — https://www.imsglobal.org/spec/proctoring/v1p0
LTI-PROC-2 MUST ✅ done The tool returns control to the platform with an LtiEndAssessment message at the end of the attempt (and MAY surface an Assessment Control Service verdict during it). lti:1.3:conf:proctoring/LTI-PROC-2 LTI Proctoring Services 1.0 §5 (end assessment / ACS) — https://www.imsglobal.org/spec/proctoring/v1p0
Modelled schema anchors
  • LTI-PROC-1lti:1.3:doc:StartProctoringMessage/startAssessmentUrl, lti:1.3:doc:StartProctoringMessage/assessmentProctoringSettings
  • LTI-PROC-2lti:1.3:doc:EndAssessmentMessage/messageType, lti:1.3:doc:EndAssessmentMessage/attemptNumber
Req Level Status Statement Verified by / justification Spec source
LTI-SEC-1 MUST ✅ done All JWT signing and verification MUST use asymmetric RSA-256; symmetric cryptosystems are forbidden and a JWT MUST be signed only with the holder’s private key. lti:1.3:conf:security/LTI-SEC-1 LTI Advantage Cert §4.2 (security requirements) — https://www.imsglobal.org/spec/lti/v1p3/cert/
LTI-SEC-2 MUST ➖ n/a All communication endpoints MUST be secured with TLS (SSL alone is forbidden). TLS termination/enforcement is handled at the Istio ingress / Gateway API tier (infra), not in app code — there is no application-level conformance surface to prove here. Revisit if the tool ever terminates TLS itself. LTI Advantage Cert §4.2 (TLS) — https://www.imsglobal.org/spec/lti/v1p3/cert/
LTI-SEC-3 MUST ✅ done A tool MUST expose its public keys for the platform to verify the tool’s JWTs — a JWKS URL (recommended) or a registered public key. lti:1.3:conf:security/LTI-SEC-3 LTI Advantage Cert §4.2.2.1 (JWKS exchange) — https://www.imsglobal.org/spec/lti/v1p3/cert/
LTI-SEC-4 MUST ✅ done To call a service (NRPS / AGS) a tool MUST obtain an OAuth 2.0 access token via the client-credentials grant, presenting a signed client-assertion JWT and requesting the service scope. lti:1.3:conf:security/LTI-SEC-4 1EdTech Security Framework 1.1 §4 (client-credentials grant) — https://www.imsglobal.org/spec/security/v1p1
Modelled schema anchors
  • LTI-SEC-1
  • LTI-SEC-2
  • LTI-SEC-3
  • LTI-SEC-4