LTI 1.3 Platform Request Flow
In de context van LTI 1.3 fungeert SkillsTown als de Tool, en de klant fungeert als het Platform. Deze pagina geeft een overzicht van de aanvraagstroom.
Deze stroom moet gevolgd worden als de cursussen van SkillsTown geïmplementeerd zullen worden in jouw platform.
Inloggen Tool
Als eerste stap zal het Platform de inlog-URL oproepen: https://account.onlineacademy.nl/api/ltiTool/OnGetOrPost.
Via deze aanvraag verwachten we de volgende parameters te ontvangen: iss en/of client_id, login_hint, target_link_uri, lti_message_hint
Voorbeeldwaarden
| Parameter | Waarde |
|---|---|
| client_id | 71bafed5-5db8-483a-bc91-0531e651e57d |
| iss | https://issuer.example.com/ |
| login_hint | 12345 |
| target_link_uri | https://account.onlineacademy.nl/api/ltiTool/ToolLaunch |
| lti_message_hint | { "course_version_id": xxxxx, "deployment_id": "efbd32f9-2461-4be8-9ca4-d9cbf2367cca", "test": false, "messageType": "LtiResourceLinkRequest", "company_name": "Example Company", "content_version": 9, "course_type": "6", "culture": "en-GB" } |
GET of POST
Als je deze eindpunt oproept met een GET-methode, moeten deze parameters als queryparameters worden toegevoegd. Als je een POST-methode gebruikt, moeten deze waarden in het aanvraaglichaam staan.
Autorisatie Platform
Met de waarden die we ontvangen via ons Autorisatie-eindpunt, sturen we een aanvraag naar de opgegeven autorisatie-URL met de volgende queryparameters:
| Parameter | Waarde |
|---|---|
| client_id | 71bafed5-5db8-483a-bc91-0531e651e57d |
| iss | https://account.onlineacademy.nl |
| response_type | id_token |
| scope | openid profile email |
| redirect_uri | https://account.onlineacademy.nl/api/ltiTool/ToolLaunch |
| state | b4523079761ad690228256c7909f0d140d89b8aedbb04c8685254 |
| nonce | 1ae28c4dff14531eaf5a82db859e526ead88a83db05deb9c7ff43f81 |
| login_hint | [Gebruikers-id] |
| prompt | none |
| response_mode | form_post |
| lti_message_hint | { "course_version_id": xxxxx, "deployment_id": "efbd32f9-2461-4be8-9ca4-d9cbf2367cca", "test": false, "messageType": "LtiResourceLinkRequest", "company_name": "Example Company", "content_version": 9, "course_type": "6", "culture": "en-GB" } |
ToolLaunch
Het Platform kan nu de JWT-token construeren en doorverwijzen naar https://account.onlineacademy.nl/api/ltiTool/ToolLaunch, waarbij de JWT-token aan de payload wordt toegevoegd.
Via de opgegeven Keyset-URL zullen we de token valideren.
Voorbeeld JWT-payload
Het volgende is een voorbeeldobject met verplichte items, die als JWT in de payload moeten worden opgenomen:
{
"nbf": 1719477033,
"exp": 1719477333,
"name": "John Doe",
"given_name": "John",
"family_name": "Doe",
"email": "user@example.com",
"iss": "https://issuer.example.com",
"aud": "Example Company",
"nonce": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"iat": 1719477033,
"sid": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"sub": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"auth_time": 1719402633,
"idp": "local",
"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/lineitem.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/score"
],
"lineitems": "https://example.com/scores",
"lineitem": "https://example.com/scores"
},
"https://purl.imsglobal.org/spec/lti/claim/deployment_id": "XXXX-Course-Identifier_XXXX",
"https://purl.imsglobal.org/spec/lti/claim/custom": {
"course_identifier": "XXXX-Course-Identifier_XXXX"
}
}course_id
We verwachten een course_identifier-parameter te ontvangen als een aangepaste claim om de juiste cursus te koppelen.
De cursus moet nu zichtbaar zijn in het platform.
Voortgang
Telkens wanneer de gebruiker het actieve venster verlaat, zal onze Tool een POST-aanvraag versturen naar de lineitem-URL die aan ons is verstrekt in de ToolLaunch JWT-token. Als de lineitem niet beschikbaar is, zal het de waarde van lineitems gebruiken.
Voorbeeldobject onvoltooide cursus:
{
"activityProgress": "InProgress",
"gradingProgress": "Pending",
"scoreGiven": 0.2,
"scoreMaximum": 1,
"timestamp": "YYYY-MM-DDTHH:MM:SS.MS\u002B00:00",
"userId": "12345"
}Voorbeeldobject voltooide cursus:
{
"activityProgress": "Completed",
"gradingProgress": "FullyGraded",
"scoreGiven": 1,
"scoreMaximum": 1,
"timestamp": "YYYY-MM-DDTHH:MM:SS.MS\u002B00:00",
"userId": "12345"
}