Skip to content

Instantly share code, notes, and snippets.

@olanb7
Created August 22, 2017 11:29
Show Gist options
  • Save olanb7/f51c132eca1730f58f9d220f42cb9e80 to your computer and use it in GitHub Desktop.
Save olanb7/f51c132eca1730f58f9d220f42cb9e80 to your computer and use it in GitHub Desktop.
IMS LTI Certification Tool Consumer Profile Issues
Unrecognised service(s) in Tool Proxy [« less]
https://apps.imsglobal.org/lti/cert/tp/tp_tcprofile.php#ToolProxy.collection
https://apps.imsglobal.org/lti/cert/tp/tp_tcprofile.php#Outcomes.LTI1
{
"@context": [
"http://purl.imsglobal.org/ctx/lti/v2/ToolConsumerProfile",
{
"tcp": "https://apps.imsglobal.org/lti/cert/tp/tp_tcprofile.php#"
}
],
"@type": "ToolConsumerProfile",
"@id": "https://apps.imsglobal.org/lti/cert/tp/tp_tcprofile.php",
"lti_version": "LTI-2p0",
"guid": "xyz",
"product_instance": {
"guid": "imscert.org",
"product_info": {
"product_name": {
"default_value": "IMS LTI Certification Suite",
"key": "product.name"
},
"product_version": "2.0.4 (21-Aug-17)",
"description": {
"default_value": "IMS Global Learning Consortium",
"key": "product.version"
},
"technical_description": {
"default_value": "LTI 2.0 compliant",
"key": "product.technical.description"
},
"product_family": {
"code": "ims",
"vendor": {
"code": "www.imsglobal.org",
"vendor_name": {
"default_value": "IMS",
"key": "product.vendor.name"
},
"description": {
"default_value": "IMS is a leading provider of interoperability specifications for education",
"key": "product.vendor.description"
},
"website": "http://www.imsglobal.org/",
"timestamp": "2017-08-21T23:26:02+00:00",
"contact": {
"email": "lticonformance@imsglobal.org"
}
}
}
},
"service_owner": {
"service_owner_name": {
"default_value": "IMS",
"key": "service_owner.name"
},
"description": {
"default_value": "A Higher Education establishment in a land far, far away.",
"key": "service_owner.description"
},
"support": {
"email": "conformance@imsglobal.org"
}
},
"support": {
"email": "info@imsglobal.org"
}
},
"security_profile": [
{
"security_profile_name": "lti_oauth_hash_message_security",
"digest_algorithm": [
"HMAC-SHA1"
]
},
{
"security_profile_name": "lti_oauth_body_hash_ws_security",
"digest_algorithm": [
"HMAC-SHA1"
]
},
{
"security_profile_name": "lti_jwt_message_security",
"digest_algorithm": [
"HS256"
]
},
{
"security_profile_name": "lti_jwt_ws_security",
"digest_algorithm": [
"HS256"
]
},
{
"security_profile_name": "oauth2_access_token_ws_security"
}
],
"capability_offered": [
"Person.name.given",
"Person.name.family",
"Person.email.primary",
"User.id",
"User.username",
"basic-lti-launch-request",
"ContentItemSelectionRequest",
"Context.id",
"Context.title",
"ResourceLink.title",
"CourseSection.sourcedId",
"Person.sourcedId",
"Person.name.full",
"Membership.role",
"Result.autocreate",
"Result.sourcedId",
"BasicOutcome.url",
"BasicOutcome.sourcedId",
"ToolProxy.custom.url",
"ToolProxyBinding.custom.url",
"LtiLink.custom.url",
"LineItems.url",
"LineItem.url",
"Result.url",
"ToolProxyBinding.memberships.url",
"ToolConsumerProfile.url"
],
"service_offered": [
{
"@type": "RestService",
"@id": "tcp:AccessToken.item",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_accesstoken.php?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/json"
],
"action": [
"POST"
]
},
{
"@type": "RestService",
"@id": "tcp:ToolProxy.collection",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_toolproxy.php?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lti.v2.toolproxy+json"
],
"action": [
"POST"
]
},
{
"@type": "RestService",
"@id": "tcp:Outcomes.LTI1",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_outcome.php?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lti.v1.outcome+xml"
],
"action": [
"POST"
]
},
{
"@type": "RestService",
"@id": "tcp:LtiLinkSettings",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_settings.php/links/{link_id}/custom?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lti.v2.toolsettings+json",
"application/vnd.ims.lti.v2.toolsettings.simple+json"
],
"action": [
"GET",
"PUT"
]
},
{
"@type": "RestService",
"@id": "tcp:ToolProxyBindingSettings",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_settings.php/lis/{context_type}/{context_id}/bindings/{vendor_code}/{product_code}/custom?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lti.v2.toolsettings+json",
"application/vnd.ims.lti.v2.toolsettings.simple+json"
],
"action": [
"GET",
"PUT"
]
},
{
"@type": "RestService",
"@id": "tcp:ToolProxySettings",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_settings.php/ToolProxy/{tool_proxy_guid}/custom?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lti.v2.toolsettings+json",
"application/vnd.ims.lti.v2.toolsettings.simple+json"
],
"action": [
"GET",
"PUT"
]
},
{
"@type": "RestService",
"@id": "tcp:LineItem.collection",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_lineitem.php/context/{context_id}/lineitems?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lis.v2.lineitemcontainer+json"
],
"action": [
"GET",
"POST"
]
},
{
"@type": "RestService",
"@id": "tcp:LineItem.item",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_lineitem.php/context/{context_id}/lineitems/{lineitem_id}?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lis.v2.lineitem+json"
],
"action": [
"GET",
"PUT",
"DELETE"
]
},
{
"@type": "RestService",
"@id": "tcp:LineItem.results",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_lineitem.php/context/{context_id}/lineitems/{lineitem_id}?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lis.v2.lineitemresults+json"
],
"action": [
"GET",
"PUT"
]
},
{
"@type": "RestService",
"@id": "tcp:LISResult.collection",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_lisresult.php/context/{context_id}/lineitems/{lineitem_id}/results?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lis.v2.resultcontainer+json"
],
"action": [
"GET",
"POST"
]
},
{
"@type": "RestService",
"@id": "tcp:LISResult.item",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_lisresult.php/context/{context_id}/lineitems/{lineitem_id}/{lineitem_id}/results/{user_id}?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lis.v2p1.result+json"
],
"action": [
"GET",
"PUT",
"DELETE"
]
},
{
"@type": "RestService",
"@id": "tcp:ToolProxyBindingMemberships",
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_membership.php/context/{context_id}/membership?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"format": [
"application/vnd.ims.lis.v2.membershipcontainer+json"
],
"action": [
"GET"
]
}
]
}
{
"@type": "ToolProxy",
"@context": [
"http://static.integrations.turnitin.com/context.json-ld"
],
"lti_version": "LTI-2p0",
"tool_consumer_profile": "https://apps.imsglobal.org/lti/cert/tp/tp_tcprofile.php?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"tool_profile": {
"lti_version": "LTI-2p0",
"product_instance": {
"guid": "turnitin.com",
"product_info": {
"product_name": {
"default_value": "Turnitin",
"key": "tool.name"
},
"description": {
"default_value": "One of the most widely distributed educational applications in the world, Turnitin is the most effective online technology used to manage the submission, tracking and evaluation of student papers online.",
"key": "tool.description"
},
"product_version": "1.0",
"technical_description": {
"default_value": "Turnitin LTI Tool Provider - IMS Global LTI 1.0, 1.1, 2.0 Certified (IMS Registration: IMSB2C2tn2013W1) see more: http://guides.turnitin.com/03_Integrations/Learning_Tools_Interoperability_(LTI)",
"key": "tool.technicalDescription"
},
"product_family": {
"code": "turnitin-lti",
"vendor": {
"code": "turnitin.com",
"vendor_name": {
"default_value": "Turnitin DevX",
"key": "vendor.name"
},
"description": {
"default_value": "http://turnitin.com/en_us/about-us/our-company",
"key": "vendor.description"
},
"website": "http://turnitin.com",
"timestamp": "2016-09-01T00:00:00Z"
}
}
}
},
"base_url_choice": [{
"default_base_url": "https://turnitin.ngrok.io/"
}],
"service_offered": [{
"@id": "https://{turnitinWebhookHost}/webhooks/{turnitinHost}/proxys/{proxyInstanceId}/customers/{customerId}#vnd.Canvas.SubmissionEvent",
"@type": "RestService",
"endpoint": "https://tii-canvas.ngrok.io/webhooks/turnitin.ngrok.io/proxys/71683271-a431-42c3-a7dd-ffeb7a642df1/customers/60039",
"format": [
"application/json"
],
"action": ["POST"]
}],
"resource_handler": [{
"resource_type": {
"code": "tiiasmt"
},
"resource_name": {
"default_value": "Turnitin Assignment Inbox",
"key": "assessment.resource.name"
},
"description": {
"default_value": "Create Turnitin Assignment",
"key": "assessment.resource.description"
},
"message": [{
"message_type": "basic-lti-launch-request",
"path": "api/lti/1p0/assignment",
"parameter": [{
"name": "context_memberships_url",
"variable": "ToolProxyBinding.memberships.url"
}],
"enabled_capability": [
"BasicOutcome.url",
"BasicOutcome.sourcedId",
"Context.id",
"Context.title",
"Membership.role",
"Person.email.primary",
"Person.name.family",
"Person.name.full",
"Person.name.given",
"ResourceLink.title",
"ToolProxyBinding.memberships.url",
"User.id"
],
"optional_capability": [
"BasicOutcome.url",
"BasicOutcome.sourcedId",
"Context.title",
"Person.email.primary",
"Person.name.family",
"Person.name.full",
"Person.name.given",
"ResourceLink.title",
"ToolProxyBinding.memberships.url"
]
}],
"icon_info": [{
"default_location": {
"path": "pd/static/source/images/logos/turnitin-icon-rgb.png"
},
"key": "iconStyle.default.path"
}]
}]
},
"custom": {
"proxy_instance_id": "71683271-a431-42c3-a7dd-ffeb7a642df1",
"customer_id": "60039"
},
"security_contract": {
"shared_secret": "rqk64jfadq4ujkkhodmpsmlfyimufvexnpqumqlzg9d2nse4hlhs3kg24dwxugm5zux13ogv17uhquwpfgdxbmabf6zlryxqvjvwiixtiqxkepa7ihg8hno95zslwriq",
"tool_service": [{
"@type": "RestServiceProfile",
"service": "https://apps.imsglobal.org/lti/cert/tp/tp_tcprofile.php#ToolProxy.collection",
"action": ["POST"],
"required_capability": [],
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_toolproxy.php?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D"
}, {
"@type": "RestServiceProfile",
"service": "https://apps.imsglobal.org/lti/cert/tp/tp_tcprofile.php#Outcomes.LTI1",
"action": ["POST"],
"required_capability": [
"BasicOutcome.url",
"BasicOutcome.sourcedId"
],
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_outcome.php?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D"
}]
},
"enabled_capability": []
}
{
"@type": "ToolProxy",
"@context": ["http://static.integrations.turnitin.com/context.json-ld"],
"lti_version": "LTI-2p0",
"tool_consumer_profile": "https://apps.imsglobal.org/lti/cert/tp/tp_tcprofile.php?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D",
"tool_profile": {
"lti_version": "LTI-2p0",
"product_instance": {
"guid": "turnitin.com",
"product_info": {
"product_name": {
"default_value": "Turnitin",
"key": "tool.name"
},
"description": {
"default_value": "One of the most widely distributed educational applications in the world, Turnitin is the most effective online technology used to manage the submission, tracking and evaluation of student papers online.",
"key": "tool.description"
},
"product_version": "1.0",
"technical_description": {
"default_value": "Turnitin LTI Tool Provider - IMS Global LTI 1.0, 1.1, 2.0 Certified (IMS Registration: IMSB2C2tn2013W1) see more: http://guides.turnitin.com/03_Integrations/Learning_Tools_Interoperability_(LTI)",
"key": "tool.technicalDescription"
},
"product_family": {
"code": "turnitin-lti",
"vendor": {
"code": "turnitin.com",
"vendor_name": {
"default_value": "Turnitin DevX",
"key": "vendor.name"
},
"description": {
"default_value": "http://turnitin.com/en_us/about-us/our-company",
"key": "vendor.description"
},
"website": "http://turnitin.com",
"timestamp": "2016-09-01T00:00:00Z"
}
}
}
},
"base_url_choice": [{
"default_base_url": "https://turnitin.ngrok.io/"
}],
"service_offered": [{
"@id": "https://{turnitinWebhookHost}/webhooks/{turnitinHost}/proxys/{proxyInstanceId}/customers/{customerId}#vnd.Canvas.SubmissionEvent",
"@type": "RestService",
"endpoint": "https://tii-canvas.ngrok.io/webhooks/turnitin.ngrok.io/proxys/b721b916-266d-42b7-8af4-377eb158dcb6/customers/60039",
"format": ["application/json"],
"action": ["POST"]
}],
"resource_handler": [{
"resource_type": {
"code": "tiiasmt"
},
"resource_name": {
"default_value": "Turnitin Assignment Inbox",
"key": "assessment.resource.name"
},
"description": {
"default_value": "Create Turnitin Assignment",
"key": "assessment.resource.description"
},
"message": [{
"message_type": "basic-lti-launch-request",
"path": "api/lti/1p0/assignment",
"parameter": [{
"name": "context_memberships_url",
"variable": "ToolProxyBinding.memberships.url"
}],
"enabled_capability": ["BasicOutcome.url", "BasicOutcome.sourcedId", "Context.id", "Context.title", "Membership.role", "Person.email.primary", "Person.name.family", "Person.name.full", "Person.name.given", "ResourceLink.title", "ToolProxyBinding.memberships.url", "User.id"],
"optional_capability": ["BasicOutcome.url", "BasicOutcome.sourcedId", "Context.title", "Person.email.primary", "Person.name.family", "Person.name.full", "Person.name.given", "ResourceLink.title", "ToolProxyBinding.memberships.url"]
}],
"icon_info": [{
"default_location": {
"path": "pd/static/source/images/logos/turnitin-icon-rgb.png"
},
"key": "iconStyle.default.path"
}]
}]
},
"custom": {
"proxy_instance_id": "b721b916-266d-42b7-8af4-377eb158dcb6",
"customer_id": "60039"
},
"security_contract": {
"shared_secret": "7z5zjrxtbpjc1sxkgtxvtap5dwoxauxmvk5rm5j8d7trptoimrq70esgm9iylxqooarfxbqqtvbhvtdlvs4gkzalnvv5oaf83aggul3vcthz0capsnyd1n3ocgfxvovm",
"tool_service": [{
"@type": "RestServiceProfile",
"service": "tcp:ToolProxy.collection",
"action": ["POST"],
"required_capability": [],
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_toolproxy.php?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D"
}, {
"@type": "RestServiceProfile",
"service": "tcp:Outcomes.LTI1",
"action": ["POST"],
"required_capability": ["BasicOutcome.url", "BasicOutcome.sourcedId"],
"endpoint": "https://apps.imsglobal.org/lti/cert/tp/tp_outcome.php?b64=cmg4MGVrcTVjMnI0NHM2OWJmcDltZzRjNzI%3D"
}]
},
"enabled_capability": []
}
@olanb7
Copy link
Author

olanb7 commented Aug 22, 2017

LTI Certification is currently failing as we are expanding the CURIEs in out security_contract section, but the certification suite does not like this: https://cl.ly/1M3a371b3z2w

Unrecognised service(s) in Tool Proxy [« less]
https://apps.imsglobal.org/lti/cert/tp/tp_tcprofile.php#ToolProxy.collection
https://apps.imsglobal.org/lti/cert/tp/tp_tcprofile.php#Outcomes.LTI1

I've attached the invalid and working tool proxies to the gist above.

JSON-LD documentation suggests that it is valid for these CURIEs to be expanded into unambiguous identifiers, as we are doing, so I think this should be supported in the certification suite. https://json-ld.org/spec/ED/json-ld-syntax/20110615/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment