LTI Platform Notification Service
Spec Version 1.0
Document Version: | 1 |
Date Issued: | October 29th, 2024 |
Status: | This document is for review and adoption by the 1EdTech membership. |
This version: | https://www.imsglobal.org/spec/lti-pns/v1p0/main/ |
Latest version: | https://www.imsglobal.org/spec/lti-pns/latest/main/ |
Errata: | https://www.imsglobal.org/spec/lti-pns/v1p0/errata/ |
IPR and Distribution Notice
Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the specification set forth in this document, and to provide supporting documentation.
1EdTech takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on 1EdTech's procedures with respect to rights in 1EdTech specifications can be found at the 1EdTech Intellectual Property Rights webpage: http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf .
Use of this specification to develop products or services is governed by the license with 1EdTech found on the 1EdTech website: http://www.imsglobal.org/speclicense.html.
Permission is granted to all parties to use excerpts from this document as needed in producing requests for proposals.
The limited permissions granted above are perpetual and will not be revoked by 1EdTech or its successors or assigns.
THIS SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, AND IN PARTICULAR, ANY WARRANTY OF NONINFRINGEMENT IS EXPRESSLY DISCLAIMED. ANY USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE IMPLEMENTER'S OWN RISK, AND NEITHER THE CONSORTIUM, NOR ANY OF ITS MEMBERS OR SUBMITTERS, SHALL HAVE ANY LIABILITY WHATSOEVER TO ANY IMPLEMENTER OR THIRD PARTY FOR ANY DAMAGES OF ANY NATURE WHATSOEVER, DIRECTLY OR INDIRECTLY, ARISING FROM THE USE OF THIS SPECIFICATION.
Public contributions, comments and questions can be posted here: http://www.imsglobal.org/forums/ims-glc-public-forums-and-resources .
© 2024 1EdTech™ Consortium, Inc. All Rights Reserved.
Trademark information: http://www.imsglobal.org/copyright.html
Abstract
The Platform Notification Service is a new addition to the LTI 1.3 ecosystem, designed to facilitate asynchronous communication from LTI Platforms to LTI Tools. This service allows Platforms to send notifications (called "notices") to Tools outside of active user sessions, enhancing the flexibility and capabilities of LTI integrations. Key features include:
A discovery mechanism for Tools to learn about supported notice types A registration system for Tools to subscribe to specific notice types A secure messaging channel using JWT tokens for notice delivery Support for batched notices and customizable batch sizes A standardized structure for notice content and envelopes
This service aims to provide a lightweight, reliable notification system that complements existing LTI messaging capabilities, enabling more robust and responsive integrations between Platforms and Tools.
1. Conformance Statements
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
The key words MAY, MUST, MUST NOT, OPTIONAL, RECOMMENDED, REQUIRED, SHALL, SHALL NOT, SHOULD, and SHOULD NOT in this document are to be interpreted as described in [RFC2119].
An implementation of this specification that fails to implement a MUST/REQUIRED/SHALL requirement or fails to abide by a MUST NOT/SHALL NOT prohibition is considered nonconformant. SHOULD/SHOULD NOT/RECOMMENDED statements constitute a best practice. Ignoring a best practice does not violate conformance but a decision to disregard such guidance should be carefully considered. MAY/OPTIONAL statements indicate that implementers are entirely free to choose whether or not to implement the option.
The Conformance and Certification Guide for this specification may introduce greater normative constraints than those defined here for specific service or implementation categories.
2. Introduction
Previously, there was one way for an LTI Platform to send messages to an LTI Tool: via the browser auto-post launch mechanism described in the LTI 1.3 Core specification. This messaging method can conveniently begin a user interaction with the Tool, but it cannot be conveniently used during that user interaction to signal things to the Tool.
The Platform Notification Service adds a third messaging channel to LTI to facilitate Platform-to-Tool messages that can occur outside the boundaries of an active user agent session. After discovering this service in the standard way, the Tool can use a service request to:
-
Discover the various platform notice types the Platform supports (So that the Tool may register to receive notices of those types).
-
Manage the registration of a Tool-hosted HTTP webhook or handler endpoint with the Platform to receive these notices.
3. Core requirements
The LTI Platform Notification Service requires the implementation of the LTI 1.3 Core specification [LTI-13].
3.1 Security mechanisms
All service requests MUST be secured by including a properly scoped access token in the Authorization header per the IMS Global Security Framework [SEC-10]. After a Tool registers with the service to receive notices, all notices subsequently sent to it by the Platform will be JWT tokens signed with the Platform's credentials (as with standard browser-mediated LTI messages).
4. Terminology
4.1 Tool Platform and Tool
This specification uses the LTI 1.3 terminology of Tool Platform (Platform) and Tool, which respectively refer to Tool Consumer and Tool Provider used in the legacy LTI specifications.
5. Platform Notification Service features
The Platform Notification Service offers a single service endpoint that the Tool can use in two modes:
-
The Tool can use an HTTP GET on the endpoint to request the Platform's supported notice types for the current LTI deployment and the Tool's currently registered notice handlers for these notice types.
-
The Tool can use an HTTP PUT on the endpoint to register a new notice handler for a single notice type in the current LTI deployment; this will replace whatever handler was previously registered, so the Tool can provide an empty-string (
""
) in order to remove any handler registered for a notice type.
5.1 Claim and Scope
The scope for the Platform Notification Service for both modes is https://purl.imsglobal.org/spec/lti/scope/noticehandlers
.
The claim to offer the Platform Notification Service in LTI 1.3 messages is https://purl.imsglobal.org/spec/lti/claim/platformnotificationservice
, as in the following example:
The Platform MUST include platform_notification_service_url
and service_versions
to indicate to the Tool the service endpoint and supported service versions.
The Platform MUST also include a notice_types_supported
array to indicate the various platform notice types the Platform can offer to the Tool for subscription within that deployment. If the Platform offers the service to the Tool but no notice types, it must provide an empty array as the value.
5.2 Notice types advertised in Dynamic Registration Platform Config
If the Platform offers the Platform Notification service to Tools, it MUST include the list of notice types it supports in its LTI Configuration data sent during Dynamic Registration. To enable this, a new notice_types_supported
property was added to the lti-platform-configuration
claim (see Dynamic Registration, section 2.1) as in the following example:
As with the service descriptor sent in LTI messages, if the Platform offers the service, but has no supported notice types, it should include this claim but with an empty array as the value.
5.3 Scope of platform notice subscriptions
For simplicity, all registrations for notice handlers are scoped to the Tool deployment; when a Tool registers a handler to receive platform notice types within a deployment, it may get relevant notices from all LTI contexts contained within that deployment and should expect the same service URL across all contexts in the deployment.
5.4 Using the service to read registrations
The Tool can send an HTTP GET request to the service endpoint to retrieve the list of platform notice types supported within the current deployment along with the Tool's currently registered handler. A successful response includes a single JSON object in the body that specifies the client and deployment identifiers owning the notice catalog, and an array of notice-type-handler bindings.
A notice-type-handler binding has two properties: the LTI notice type (notice_type
) that could get sent to a registered handler and the handler URL (handler
), if any, to receive notices. Note that handler values will always be a string (not null) and use an empty string value to indicate no currently registered handler for the notice type.
5.5 Using the service to update registrations
The Tool can send an HTTP PUT request to the service endpoint to update the handler for a single available platform notice type, using a JSON body of a single object with a notice_type
and a handler
property.
5.5.1 Registration properties
notice_type
. (REQUIRED) Must be one of the LTI platform notice types supported by the Platform within the service's deployment.
handler
. (REQUIRED) Must be a valid URL using the HTTPS scheme; the domain for the handler
must be the same as the Tool's full domain (as specified in at least one of the Redirect URLs
and/or domain
property for the Tool's registration).
max_batch_size
. (OPTIONAL) If present, must be a JSON number greater than 0; the tool uses this to signal its desired maximum batch size. To accept the subscription size, the Platform must be able to send notices in batches up to (but not more than) this size; if the Platform cannot accept this limit, it should reject the subscription request and send back an error result. Note that the batch size gets specified (and may vary) for every distinct notice type.
Tools should consider that Platforms which support batching may well insist upon a reasonable minimum batch size (for example, ten notices per batch).
If not specified by the Tool, the Platform may freely decide on batch size for sending notices.
5.5.2 Registration request handling
If this request is successful, the Platform should respond with a single JSON object describing the successfully registered subscription, as in the following example:
If this request is not successful, the Platform should use these status code responses:
400
. If the Tool attempts to register a handler for a notice type the Platform does not offer, a handler with an invalid domain, a handler with an unsatisfactorily low requested maximum batch-size, or some other "bad data" in the registration payload.
403
. If the Tool has no permission to read or register a new notice type.
Other status code responses may be appropriate for other specific error states.
5.5.3 Platform expectations around registered handlers
When a Tool registers a notice handler it expects that registration to be durable (to exist until it, itself, decides to remove it via use of the service). The Platform SHOULD respect this and make best effort to not unilaterally make changes to a registered handler once it has been accepted via use of the service.
In particular, this means that the Platform MUST distinguish between workflows where a Tool's access to the service might be "disabled" for some reason, and those where a Tool's access to the service might be "deleted". In the former case, there is a possibility for recovery or re-enablement; in the latter, there is no expectation of that. After a Tool has successfully registered a notice handler, the Platform MUST remember that registration and retain it (restore it or re-enable it) across situations where the Tool's access to the service might be "disabled".
6. Fundamental platform notice details
LTI platform notices sent from the Platform to the Tool are lists of platform-originating JSON Web Tokens. The IMS Security Framework [SEC-10] describes the process by which a notice sender encodes its payload into a JWT.
6.1 Overall Notification Service payloads
The Platform sends lists of notices to subscribed Tools with HTTP POSTs to the appropriate notice handler endpoint (by type). The mime-type of this post must be application/json
. The body consists of a top-level envelope object that itself contains a list of one or more notice objects.
6.1.1 Envelope for notices
The envelope for notices has the following properties:
notices (REQUIRED). List of one or more platform notice objects. See the following section for further description of these objects.
6.1.2 Notice objects
Each notice object in the envelope's list has the following properties:
jwt (REQUIRED). The platform notice JWT itself. See the following section for a description of its constituent elements.
Each notice in the envelope's list must be of the same notice type (even if the Tool's notice handler endpoint is the same across multiple notice types).
6.2 Notice JWT claims
All LTI platform notice JWTs use these fundamental claims:
iss, aud (REQUIRED). Identifiers for the Issuer and Audience of the platform notice. These required claims hold the same values as defined for platform-orignating ID Tokens in the IMS Security Framework document[SEC-10].
sub (OPTIONAL). In some cases, a platform notice may be initiated by a single LTI User as the subject of the notice. In these cases, this claim holds the same value as the sub
claim in standard LTI messages as defined in the LTI 1.3 Core specification [LTI-13]. The sub
represents the user triggering the notice, this may be different to the owner of the data in the notice.
exp, iat, nonce (REQUIRED). These required claims hold the same values as defined for platform-originating ID Tokens in the IMS Security Framework document[SEC-10].
azp (OPTIONAL). This optional claim holds the same value as defiend for platform-originating ID Tokens in the IMS Security Framework document[SEC-10].
6.2.1 LTI-specific fundamental claims
All LTI platform notices also use the following fundamental LTI-specific claims; each claim name is prefaced with https://purl.imsglobal.org/spec/lti/claim/
(for brevity, the descriptions below contain only the portion of the URL path following the preface):
notice (REQUIRED). This claim's value is an object containing all the notice-specific properties for the conveying notice. See following section for further description.
version (REQUIRED). This claim's value contains a string that indicates the version of LTI to which the notice conforms.
deployment_id (REQUIRED). This claim's value contains a case-sensitive string that identifies the Platform-Tool integration governing the notice. It has the same restrictions as described in the LTI 1.3 Core specification [LTI-13].
context (OPTIONAL). In some cases, a platform notice may concern a single LTI Context as the boundary of the notice. In these cases, this claim holds the same value and restrictions as described in the LTI 1.3 Core specification [LTI-13].
custom (OPTIONAL). The custom
claim acts like a key-value map of defined custom properties that a platform may associate with the current context and any notices or messages sent from the context. This claim holds the same value and restrictions as described in the LTI 1.3 Core specification [LTI-13].
tool_platform (OPTIONAL). In some cases, a platform notice may wish to indicate details about the sending Platform. In these cases, this claim holds the same value and restrictions as described in the LTI 1.3 Core specification [LTI-13].
6.2.2 Notice-specific claims
The https://purl.imsglobal.org/spec/lti/claim/notice
claim contains all the notice-specific properties for the conveying notice.
id (REQUIRED). This property value contains a persistent identifier for the notice itself. The identifier MUST be persistently unique within the scope of the LTI deployment (that is, once used, it must never be re-used).
timestamp (REQUIRED). This property value contains a date and time for the event occurrence within the platform that prompted the notice (rather than, for example, the time when this notice's JWT was formed). The property value MUST include a time zone designator (Z
designator or +00:00
offset to specify UTC, or time offset from UTC for another time zone).
type (REQUIRED). This property value contains a string that indicates the type of the sender's LTI platform notice.
6.2.3 Vendor-specific extension claims
Vendors MAY extend the information model for any notice type and inject additional claims into the notice's JSON body by adding one or more claims. Rules for adding such claims are as described in the LTI 1.3 Core specification [LTI-13].
6.2.4 Platform notice type-specific claims
LTI platform notices specified in other documents may supplement the fundamental claims described previously with additional claims specific to the needs of the platform notice type.
LTI platform notices specified in other documents may make required any optional fundamental notice claim defined here.
6.2.5 Service descriptors
As in the core LTI specification, platforms can optionally indicate relevant services to tools by including additional claims (service descriptor claims) in notices. Each service, when described, must have a seprate claim to contain the endpoints (and possibly other properties) relevant for that service. The endpoints and properties the platform sends for a service may vary from notice to notice and are always fully resolved.
The platform SHOULD include service descriptors for relevant services in notices that are the first indication a tool may have about that context (for example in notices that signal the creation of a new Deployment or Context). This allows the tool to immediately use services to bootstrap configuration and set up, without having to wait for a message from a user launch.
7. Platform notice handling expectations
The Platform Notification Service intends to facilitate a relatively light-weight notification channel. Tools should use it with several best practice expectations in mind.
Reliability. Platforms should make best efforts to deliver notices to Tools registered to receive them, but Tools should not expect robust retries around delivery. Platforms aren't expected to make guarantees about delivery of these notices. Platforms should make best effort to wait for a timely response from a Tool when sending it a batch of notices.
Duplication. Platforms should make best efforts to deliver each notice at least once to Tools registered to receive them. Tools should expect that they may receive duplicates of a notice.
Limited Response. Tools should not expect to be able to send detailed responses to received notices, unless a particular notice type specifically calls for it. By best practice, the notification channel is intended for Platforms to send simple notices to Tools, and not as a basis for extended service interactions.
7.1 Re-sending notices
If a platform cannot deliver a notice to a tool's handler it MAY decide to retry or re-send a notice later. In this case, the platform SHOULD not change the underlying notice data, but also SHOULD regenerate a new JWT (including new issued-at, nonce, and expiry time values).
8. Platform notice types
The details for each platform notice type will be described in a document specific to that notice type.
Platform notice types SHOULD have a notice_type
name of the form Lti..Notice
. This form helps dismabiguate platform notices from synchronous-flow LTI messages that pass through the browser (and are typically called "requests" or "responses"). For example, the platform notice type to signal the copying of an LTI Context could be named LtiContextCopyNotice
.
When these platform notice types add a new "LTI-specific claim", it's assumed that the claim name is prepended with the full LTI claim prefix URI path (see previous section for LTI-specific fundamental claims) -- in this section we omit the full path in descriptions for brevity).
9. Documents
9.1 Normative Documents
- LTI Advantage Conformance Certification Guide [LTI-CERT-13]
- The LTI Advantage Conformance Certification Guide describes the procedures for testing Platforms and Tools against the LTI v1.3 and LTI Advantage services using the IMS certification test suite.
9.2 Informative Documents
- LTI Advantage Implementation Guide [LTI-IMPL-13]
- The LTI Advantage Implementation Guide provides information to lead you to successful implementation and certification of the LTI Core v1.3 specification and the set of LTI Advantage specifications.
A. References
A.1 Normative references
- [LTI-13]
- IMS Global Learning Tools Interoperability® Core Specification v1.3. C. Vervoort; N. Mills. IMS Global Learning Consortium. April 2019. IMS Final Release. URL: https://www.imsglobal.org/spec/lti/v1p3/
- [LTI-CERT-13]
- IMS Global Learning Tools Interoperability® Advantage Conformance Certification Guide. D. Haskins; M. McKell. IMS Global Learning Consortium. April 2019. IMS Final Release. URL: https://www.imsglobal.org/spec/lti/v1p3/cert/
- [LTI-IMPL-13]
- IMS Global Learning Tools Interoperability® Advantage Implementation Guide. C. Vervoort; J. Rissler; M. McKell. IMS Global Learning Consortium. April 2019. IMS Final Release. URL: https://www.imsglobal.org/spec/lti/v1p3/impl/
- [RFC2119]
- Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
- [SEC-10]
- IMS Global Security Framework v1.0. C. Smythe; C. Vervoort; M. McKell; N. Mills. IMS Global Learning Consortium. April 2019. IMS Final Release. URL: https://www.imsglobal.org/spec/security/v1p0/
B. List of Contributors
The following individuals contributed to the development of this document:
Name | Organization | Role |
---|---|---|
Viktor Haag | D2L Corporation (Canada) | Editor |
Maggie Sazio | D2L Corporation (Canada) | Contributor |
Claude Vervoort | Cengage | Working Group Chair |
Martin Lenord | Turnitin | Working Group Chair |
Richard Martin | D2L | Contributor |
Jacques Menasche | 1EdTech | Contributor |
Tim Couper | 1EdTech | Contributor |