Outlining Webassessor integration with a Learning Management System (LMS) using IMS LTI 1.3, including sign-in, adding exams to a course (Deep Linking) and returning grades (Assignment and Grade Services).
Unlike SAML and OIDC, which sign a user in to Webassessor from an identity provider, LTI lets a student or instructor open Webassessor from inside an LMS course. The LMS has already authenticated the user, and tells Webassessor who they are and what course activity they opened. LTI is offered by Kryterion, Inc. alongside SAML, OIDC.
LTI has two parties:
-
Platform: Always the Client's LMS (for example Moodle).
-
Tool: Always Webassessor (the Webassessor SSO Service).
What is supported
|
Capability |
Supported |
|---|---|
|
LTI version |
1.3 only. A launch whose version is not 1.3.x is rejected. |
|
Launch message types |
|
|
Deep Linking |
Yes. Instructors and administrators only. |
|
Assignment and Grade Services (AGS) |
Yes: posting scores, and finding or creating the line item (gradebook column). Reading results back from the LMS is not supported. |
|
Names and Role Provisioning Service (NRPS) |
Not supported. |
|
Dynamic Registration |
Not supported. Registration is manual (see Step 3). |
Pre-requisites
-
The client must have an LTI 1.3 compliant LMS and an LMS administrator able to register an external tool.
-
The client must be created in the Webassessor system as an entity and region with a brand, and the region must be Active. A launch for an inactive region is rejected.
-
Kryterion must create an LTI configuration for the client's region (Step 3).
-
The LMS must send the user's
emailclaim for existing users to be matched, andemail,given_nameandfamily_namefor new users to be created (see "How Webassessor identifies the user"). -
The LMS and Webassessor clocks should be synchronized. Webassessor accepts a clock difference of up to 5 minutes on the launch token.
Integration Points and Flows
-
Login initiation. The LMS sends the browser to the Webassessor login initiation URL (Step 2) with
iss,login_hint,target_link_uriandclient_id(and optionallylti_message_hintandlti_deployment_id). If any required value is missing, or no configuration matches the issuer and client ID, the user is sent to the Webassessor login page. -
Webassessor stores a single-use state and nonce server-side for 10 minutes (not in a browser session cookie, so the flow works inside an LMS iframe) and redirects the browser to the LMS authorization endpoint (
scope=openid,response_type=id_token,response_mode=form_post,prompt=none). -
Launch. The LMS posts a signed
id_tokenand the state back to the Webassessor launch URL. -
Webassessor validates the token in this order, and stops at the first failure: well-formed JWT; signature against the LMS JWKS (with a refetch if the LMS has rotated keys); issuer; audience;
azpwhen the audience has several values; subject; expiry and issued-at; nonce present, matching and not reused; message type; LTI version 1.3.x; deployment ID present and registered; deployment ID matching the one sent at login (when one was sent); roles present; for a resource link launch theresource_linkclaim with anid; for a Deep Linking launch thedeep_linking_settingsclaim and a valid return URL;target_link_urimatching the one sent at login. Any failure sends the user to the Webassessor login page and no session is created. -
Webassessor resolves the Webassessor user, optionally creating one (JIT), and signs them in, or for a Deep Linking launch shows the exam picker.
Implementation Steps
Step 1: Client provides the LMS platform details
Kryterion needs the following from the client's LMS. These are registered in the client's LTI configuration.
|
Item |
Description |
|---|---|
|
Issuer |
The platform's issuer URL, provided by the LMS. Maximum 255 characters. |
|
LTI Client ID |
The ID the LMS assigns to Webassessor when Webassessor is registered as a tool. Maximum 255 characters. The pair (Issuer, Client ID) must be unique across Webassessor LTI configurations. |
|
Auth Login URL |
The LMS OIDC authorization endpoint. Maximum 500 characters. |
|
Auth Token URL |
The LMS OAuth2 token endpoint, used for grade passback. Maximum 500 characters. |
|
JWKS URL |
The LMS public key set endpoint, used to verify launch tokens. Maximum 500 characters. |
|
Audience |
(Optional) If set, the launch token's audience must contain this value instead of the Client ID. Maximum 500 characters. |
|
Deployment ID(s) |
One or more deployment IDs the LMS assigns. At least one is required, and a launch with a deployment ID that is not registered is rejected. |
Step 2: Client registers Webassessor as an external tool in the LMS
Give the LMS administrator the following Webassessor values.
-
Login initiation URL
-
Sandbox:
https://sb01.webassessor.com/SsoService/lti/login -
Production:
https://www.webassessor.com/SsoService/lti/login
-
-
Redirect / launch URL (the LMS posts the launch token here)
-
Sandbox:
https://sb01.webassessor.com/SsoService/lti/launch -
Production:
https://www.webassessor.com/SsoService/lti/launch
-
-
Public keyset (JWKS) URL (the LMS uses it to verify Webassessor's signed messages)
-
Sandbox:
https://sb01.webassessor.com/SsoService/lti/jwks -
Production:
https://www.webassessor.com/SsoService/lti/jwks
-
-
Tool URL / target link URL: the launch URL above.
-
Deep Linking (if the client wants instructors to add exams from inside a course): enable Deep Linking on the tool, using the same launch URL as the content-selection URL.
-
Services / scopes (for grade passback), if the LMS asks which to grant:
-
https://purl.imsglobal.org/spec/lti-ags/scope/score -
https://purl.imsglobal.org/spec/lti-ags/scope/lineitem -
https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly
-
-
User data to share: name and email of the user (the claims
email,given_name,family_name), the user's roles, and custom parameters where used (see "Adding an exam to a course").
Webassessor's public keys (RS256) are served at the JWKS URL; give the LMS that URL rather than a copy of the key. Webassessor creates the signing key itself.
Step 3: Kryterion creates the LTI configuration
Kryterion Support configures the client's region in the Webassessor admin application (SSO details for the client region, type LTI) using the Step 1 values.
|
Field |
Meaning |
|---|---|
|
Provider Name |
Unique identifier for the connection. |
|
Issuer, LTI Client ID, Auth Login URL, Auth Token URL, JWKS URL, Audience, Deployment IDs |
As described in Step 1. |
|
JIT Provisioning |
Yes or No. Yes allows first-time students to be created automatically (see "Just-in-time provisioning"). |
|
JIT Default Role |
Fixed at Candidate. |
|
Landing Page |
Where an active student lands after launch for regions that use the legacy candidate UI (Home, Registration or Assessments). |
Step 4: Instructors add Webassessor activities in the LMS
Once the tool is registered, an instructor adds Webassessor to a course either as a generic Webassessor link, or by choosing a specific exam through Deep Linking (see below).
How Webassessor identifies the user
For a resource link launch, Webassessor resolves the Webassessor account in this order:
-
By LMS identity. Webassessor remembers the combination (LTI configuration, deployment ID,
sub) from a previous launch. If it is known, that account is used. -
By login. The
emailclaim, trimmed and in lowercase, is looked up as a Webassessor login in the client's region. -
By email. The same value is looked up as the email address of a Webassessor user in the client's region. If more than one user in the region has that email address, it is treated as no match.
-
By JIT provisioning, if nothing matched (see below).
Steps 2 and 3 need an email claim. After a successful launch, Webassessor records the (configuration, deployment ID, sub) combination against the account.
An inactive account is not signed in and the user is shown the "not authorized" page.
Student launch (resource link)
-
New candidate UI regions: the student is handed off to the new candidate UI through a one-time credential and arrives at the candidate pages.
-
Legacy candidate UI regions: the student is signed in with a login cookie and sent to the Landing Page configured on the LTI configuration (Home, Registration or Assessments).
-
If the launch carries exam routing (see "Adding an exam to a course"), the student is sent to the new candidate UI so the routing can be applied, even in a region that otherwise uses the legacy UI.
-
LTI launches use the candidate sign-in hand-off only; there is no administrator sign-in through LTI. Administrators sign in to Webassessor with SAML, OIDC or a Webassessor password.
Roles
Webassessor classifies the LTI roles claim into one role, accepting the membership, institution and system role vocabularies:
|
Classified role |
Role values recognized (including sub-roles after |
|---|---|
|
Administrator |
Administrator (membership, institution or system) |
|
Instructor |
Instructor (membership or institution), Faculty (institution) |
|
Learner |
Learner (membership), Student (institution) |
|
Unknown |
anything else, including legacy LTI 1.1 role names |
If several roles are present, Administrator wins, then Instructor, then Learner. Role classification is used for Deep Linking access and for JIT provisioning. It does not otherwise change how a launch resolves the user.
Just-in-time (JIT) provisioning
JIT creates a Webassessor candidate account automatically the first time a student launches, when no existing account matches.
JIT happens only when all of the following are true:
-
JIT Provisioning is Yes on the LTI configuration.
-
The region uses the new candidate UI. JIT is not available for legacy UI regions.
-
The token's roles classify as Learner. Instructors, administrators and unknown roles are not created.
-
The token has an
emailclaim.
What is created:
-
A candidate with status Active in the client's region, with the login set to a generated unique value, the email address from the
emailclaim (trimmed, lowercase), and first and last name fromgiven_nameandfamily_name(blank if absent). -
A candidate record and a random placeholder password. Students never sign in to Webassessor with a password through LTI.
-
No address or custom field data, because an LTI token does not carry it. The candidate application is responsible for asking the student to complete their profile.
If the email address is already used by another user in the region, the account is not created.
JIT rejection outcomes (the student is sent to the login page with an error):
|
Error code |
Meaning |
|---|---|
|
|
No matching account, and JIT is off or the region uses the legacy candidate UI. |
|
|
The token's role is Administrator. |
|
|
The token's role is Instructor. |
|
|
The token's role is not recognized. |
|
|
No |
Adding an exam to a course
An exam can be tied to an LMS activity in two ways.
Deep Linking (instructor picks the exam)
-
In the LMS, the instructor chooses to add content from Webassessor. The LMS sends a
LtiDeepLinkingRequestto the launch URL. -
Only an Instructor or Administrator (by the role classification above) may continue. Anyone else is sent to the login page.
-
The LMS request must include
deep_linking_settingswithdeep_link_return_url,accept_typesandaccept_presentation_document_targets. The return URL must be http or https and its host must match the registered platform issuer's host. -
Webassessor shows a picker page listing the exams that are Active in the client's region, have at least one allowed delivery type, and are currently open for registration. Each exam has a delivery type choice.
-
Delivery types not offered through LTI: Proctored, Paper Based, and Event Proctored. Types shown to instructors are labelled Not Proctored, Online Proctored (OLP), Web Proctored (Legacy), AI First and AI Record Review.
-
The instructor picks one exam and one delivery type. Webassessor revalidates the choice and returns a signed response to the LMS (valid for 5 minutes) containing a single resource link content item: the Webassessor launch URL, titled with the exam name, with the custom parameters
wa_product_idandwa_delivery_type. Webassessor returns exactly one content item per selection, regardless of whether the LMS allows several. If the LMS sent adatavalue, it is returned unchanged. -
The picker session is single-use and expires after 10 minutes.
Custom parameters (administrator sets them on the link)
An LMS administrator or instructor can set the custom parameters on the activity link by hand. When a student launches:
|
Custom parameter |
Meaning |
|---|---|
|
|
The numeric Webassessor exam (product) ID. |
|
|
The delivery type name, for example |
Both are required together. Webassessor then routes the student as follows:
-
The exam must exist, be Active, and belong to the client's region.
-
If the student already has a registration for that exam and delivery type that is not cancelled and not completed, the student is taken straight to launch it. (Registrations on hold or in progress are still treated as existing.)
-
Otherwise the delivery type must be allowed for LTI and the exam must be open for registration; the student is taken to register and schedule that exam and delivery type.
-
If any check fails, or a parameter is missing or invalid, the student goes to the normal landing page instead. The launch itself still succeeds.
A link with no custom parameters is a generic link and takes the student to the landing page.
Grade passback (Assignment and Grade Services)
When the LMS includes the AGS endpoint with at least one granted scope and a resource link ID, Webassessor records the grading information for that student and activity at launch. When the student's exam is graded, Webassessor posts the result to the LMS gradebook.
-
When: Webassessor sends the result when the exam is scored (and, for manually scored exams, when scoring is completed).
-
What:
userId(the LMSsub),scoreGiven,scoreMaximum,activityProgressandgradingProgress. The score and maximum are the transcript's score and maximum score, for point, percentage and scaled scoring alike.
|
Webassessor result |
|
|
Score sent |
|---|---|---|---|
|
Pass, Fail, MC pass, MC pass with lab fail |
FullyGraded |
Completed |
Yes |
|
Not scored (waiting for manual scoring) |
PendingManual |
Submitted |
No |
|
No result yet |
Pending |
Submitted |
No |
-
Which gradebook column: Webassessor uses the column the student launched from: first a column already linked to that registration, then a link created for the same exam and delivery type (newest launch), then a generic link without an exam (newest launch). If the registration is linked to columns in several courses, the score is posted to each.
-
Line item: if the LMS did not provide a single line item at launch, Webassessor queries the LMS line items for the resource link and, if none exists and the
lineitemscope was granted, creates one (label from the activity title, otherwise "WA Assessment"; maximum score from the result, or 100 when not known). -
Scopes: the
scorescope must have been granted at launch.lineitemorlineitem.readonlyis needed to look up a line item.lineitemis needed to create one. -
How Webassessor authenticates to the LMS: it requests an access token from the Auth Token URL using a signed client assertion (
private_key_jwt), verified by the LMS against the Webassessor JWKS URL. -
Grade passback is best-effort. If posting fails, the exam result is not affected.
Launch error outcomes
If a launch cannot be validated, the user is sent to the Webassessor login page and no session is created. Webassessor logs a specific reason for each of these; the user does not see it.
|
Reason |
Meaning |
|---|---|
|
State not found |
Login state is missing, expired (10 minutes) or already used. |
|
Config not found |
No LTI configuration for the state. |
|
Token parse or signature failure |
The token is malformed, or does not verify against the LMS JWKS. |
|
Issuer / audience / |
Claims do not match the registered issuer, client ID (or configured audience). |
|
Missing subject |
No |
|
Token expired or issued in the future |
Beyond 5 minutes of clock difference. |
|
Nonce missing, mismatched or replayed |
The nonce does not match login, or was already used. |
|
Message type or version invalid |
Not |
|
Deployment ID missing, unknown or mismatched |
Not registered for this platform, or different from the login request. |
|
Roles missing |
No |
|
Resource link missing or invalid |
A resource link launch without |
|
Deep Linking settings missing or invalid |
Missing required fields or a return URL that does not match the issuer host. |
|
|
Differs from the value sent at login. |
A student with a valid launch but no account, an inactive account, or a JIT rejection is sent to the login page or "not authorized" page with an error, as described above.
Logout
LTI sessions are logged out locally in Webassessor only. Webassessor does not call back to the LMS and there is no identity provider session to end.
Access to certain features is restricted based on role type in an effort to reduce item exposure and promote process integrity. Please see the member role description page for information on permissions.