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

Picture

Dados da iônica

Picture

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