LTI / SSO
Learning Tools Interoperability é uma especificação de tecnologia educacional desenvolvida pelo IMS Global Learning Consortium. Ele especifica um método para um sistema de aprendizagem invocar e se comunicar com sistemas externos. De uma forma simplista é uma camada adicional ao OIDC (OpenID Connect) que incorpora dados de profile do usuário (aluno, professor, etc), para que o parceiro consiga todos os dados de usuário necessários para a integração entre sistemas de ensino (LMS, Roles, nome, ID, etc). Dessa forma, além de padronizar os dados enviados, é assegurado que dados sensíveis (CPF, RG, etc) não serão trafegados pela integração. Maiores detalhes podem ser encontrados no tópico Referências desta página.
O Login Unificado (SSO – Single Sign-On) é feito por meio do LTI Launch. Para que isso aconteça é necessário que sejam implementadas as duas URLs, descritas abaixo.
A – URL do LTI Launch Starter
É a URL para qual o cliente será redirecionado quando acessar sua ferramenta pelo menu global. Por esta URL você iniciará o processo de autenticação e irá redirecionar o cliente para nós novamente. A partir desse momento o cliente passará pelo fluxo do OpenID/LTI, e após as autorizações o enviaremos de volta para você no link que informar nesse redirect.
B – URL que receberá o cliente após o processo inicial de autenticação/autorização
Após o cliente ter passado por todo o fluxo do OpenID/LTI ele será redirecionado para esta página, juto com os seus dados e um token, que poderá ser utilizado para fazer requests em nome do usuário para nossas APIs. Essa URL é informada como query string no redirecionamento acima (redirect_url).
Abaixo iremos descrever em detalhes todo o processo, quais os padrões das URLs e quais dados elas devem conter.
Diagrama de Sequencia

Dados da iônica
Os dados abaixo que sua ferramenta irá utilizar para se comunicar conosco
Issuer:
oidcAuthorizeUrl:
jwksUrl:
clientId: Seu id na nossa plataforma, iremos gerar e te enviar
URLs Parceiro (Especificações Técnicas)
LTI Start Launch (A)
Cada solicitação deve gerar um nonce único, recomendamos um uuid-v4.
Recomenda-se a geração de um state com algum dado que o parceiro queira receber de volta na redirect_url.
Deve-se validar se o iss está cadastrado e válido. Caso não esteja, retornar Unauthorized e fazer um log detalhado.
Opcionalmente pode-se validar se o redirectUrl é path válido para redirecionamento e caso não seja, retornar Forbidden e fazer um log detalhado.
Formato da URL e parâmetros
GET {{partner}}/{{path_to_lti_launch_starter}}?iss={{iss}}&redirect_url={{redirectURL}}
partner: host do parceiro
path_to_lti_launch_starter: um path arbitrário para a funcionalidade (deverá ser fornecido para a FTD durante o cadastro)
iss: Emissor (issuer) da requisição. Consultar dados da iônica.
rediredt_url (B): endereço de destino. É para onde o usuário será redirecionado após login. Deverá ser um endereço válido do parceiro.
Resposta
Deve ser um redirect temporário (307) no seguinte formato
{{oidcAuthorizeUrl}}?client_id={{clientId}}&redirect_url={{redirect_url}}&scope=openid%20code&state={{state}}&nonce={{nonce}}
oidcAuthorizeUrl: Consultar no tópico dados da iônica
clientId: Informado pela FTD após o cadastro do parceiro
redirect_url: URL para a qual o parceiro deseja que o usuário seja direcionado após o Login.
Home LTI (B)
Esse EndPoint foi informado na resposta acima e é para ele que o usuário será direcionado após o login. Esse EndPoint deve validar o id_token utilizando a chave pública que é obtida via jwksUrl. Se o token for inválido, retornar erro Unauthorized, sem detalhes e fazer um log detalhado do problema.
Todas as informações do usuário estão em id_token.payload, que também contém os dados de LTI.
Formato da URL e parâmetros
GET {rediret_url}}/ionica/home?id_token={{id_token}}&code={{code}}&state={{state}}&nonce={{nonce}}
id_token: token LTI
state: conterá o mesmo conteúdo preenchido na resposta do EndPoint A.
nonce: conterá o mesmo conteúdo preenchido na resposta do EndPoint B.
code: se preenchido, é possível utilizá-lo para fazer requisições nas APIs da iônica em nome do usuário.
Resposta
200 com a página inicial da ferramenta
Referências
SPEC LTI 1.3
http://www.imsglobal.org/spec/lti/v1p3/
Simulador LTI Oficial IMS Global
https://lti-ri.imsglobal.org/lti/tools
Exemplo de LTI com OpenID
Simulador de Tool LTI em Spring Boot