Skip to content

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

ParameterWaarde
client_id71bafed5-5db8-483a-bc91-0531e651e57d
isshttps://issuer.example.com/
login_hint12345
target_link_urihttps://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:

ParameterWaarde
client_id71bafed5-5db8-483a-bc91-0531e651e57d
isshttps://account.onlineacademy.nl
response_typeid_token
scopeopenid profile email
redirect_urihttps://account.onlineacademy.nl/api/ltiTool/ToolLaunch
stateb4523079761ad690228256c7909f0d140d89b8aedbb04c8685254
nonce1ae28c4dff14531eaf5a82db859e526ead88a83db05deb9c7ff43f81
login_hint[Gebruikers-id]
promptnone
response_modeform_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:

json
{
  "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:

json
{
  "activityProgress": "InProgress",
  "gradingProgress": "Pending",
  "scoreGiven": 0.2,
  "scoreMaximum": 1,
  "timestamp": "YYYY-MM-DDTHH:MM:SS.MS\u002B00:00",
  "userId": "12345"
}

Voorbeeldobject voltooide cursus:

json
{
  "activityProgress": "Completed",
  "gradingProgress": "FullyGraded",
  "scoreGiven": 1,
  "scoreMaximum": 1,
  "timestamp": "YYYY-MM-DDTHH:MM:SS.MS\u002B00:00",
  "userId": "12345"
}