LTI 1.3 clarifications

LTI 1.3 clarifications

I’m not sure if I’m bad at reading specs or whether some things are just ambiguous, but I was hoping someone could verify my understanding of a few LTI 1.3 issues.

1) For a given issuer, there can be multiple client_id values. Can the service URLs vary based on the client_id, or are they always linked only to the issuer?

2) Deployment ids are unique across the issuer, even if they’re associated with different client_ids. In other words, it’s safe to store deployments using issuer + deployment_id as the key (like in the php LTI library) and we don’t need to key it with the client_id.

3) Advantage access tokens are based on the issuer+client_id and scope, so a token cache should be keyed on issuer+client_id and scope (e.g. tokens don’t work for the entire issuer, just for one client_id).

4) If a launch is using LTI 1.3, a deep linking request will be version 2.0 request, and I don’t have to worry about supporting earlier formats of Deep Linking / Content Selection requests.

Also, some questions about the Grade Service.

5) Is it safe to assume the “lineitem” value for a link won’t change? As in, is it safe to cache this value rather than looking it up every time (like the php LTI library does). I ask because in LTI 1.1, Moodle changed the lti_sourcedid with every launch, which made it harder to cache.

6) From my understanding, if a “lineitem” value is passed, it means the LMS already has a grade column for that link. If there isn’t a “lineitem” value, but there is a “lineitem” scope, then the tool will need to call that service to create a lineitem before sending a grade. Is that correct? Or do we need to query the lineitem service first to see if there’s a column they just didn’t send?

7) If the course is copied in the LMS, and the links previously each had a single grade column associated, can a tool safely assume the LMS will associate the LMS links with the columns and send a “lineitem” with the launch? Or will the tool need to plan to query the “lineitems” service to find the grade column? If the latter, I’m assuming the “tag” or “resourceId” would be used to find the right lineitem. From the specs it sounds like “resourceId” would be the one to use, since it is preserved in course copies?

8) If a link has multiple line items associated with it, the specs make it sound like no “lineitem” will be passed, and there’s no indication that a lineitem might exist. In that case, I’m assuming the tool needs to query the lineitems service and use the “tag” or “resourceId” to see if a lineitem exists?