Il existe une norme appelée certification LTI. LTI est un acronyme pour le mot Interopérabilité des outils d'apprentissage, ce qui signifie une norme pour l'échange d'informations d'authentification entre les outils d'aide à l'apprentissage.
C'est une technologie assez niche qui a un domaine spécifique parmi les technologies d'authentification, donc beaucoup de gens peuvent ne pas le savoir. Je ne connaissais même pas le mot LTI avant de me spécialiser en ingénierie pédagogique.
Vous trouverez ci-dessous un schéma explicatif de la certification LTI officiellement délivrée par IMS GLOBAL.
Personnellement, je comprends que c'est une sorte d'OAuth après tout, mais l'application que nous développons est Learning Tools, le principal outil qui est à la base de l'authentification est Learning Platform, et Learning Tools est une extension de Learning Platform. Au lieu de le fournir, vous obtiendrez vos informations d'identification de la plateforme d'apprentissage. Cela présente l'avantage que les utilisateurs peuvent utiliser correctement diverses applications sans changer d'utilisateur. À l'heure actuelle, Learning Tools est également appelé LTI Tool Provider, et Learning Platform est également appelé LTI Consumer.
Mais la question est de savoir comment mettre en œuvre cela. En fait, en raison de sa technologie de niche, il manque de documentation, et même si vous recherchez sur le net, il n'y a pas beaucoup d'exemples d'implémentation publiés. Donc, dans cet article, je voudrais présenter la pratique réelle de l'authentification LTI à l'aide de Ruby on Rails.
Tout d'abord, installez les bibliothèques requises.
$ bundle add devise
$ bundle add ims-lti
$ bundle add oauth
L'avantage d'utiliser Rails est qu'il existe une bibliothèque pour l'authentification lti. Cette fois, nous allons l'implémenter en utilisant ʻims-lti`.
Créez un fichier lti_settings.yml
sous config
.
Veuillez décrire le contenu suivant (utilisez une chaîne de caractères sûre pour la clé du consommateur et le secret LTI le cas échéant).
config/lti_settings.yml
production:
__consumer_key__: '__lti_secret__'
development:
__consumer_key__: '__lti_secret__'
Une fois créé, ajoutez les paramètres pour le charger dans config / application.rb
.
config/application.rb
config.lti_settings = Rails.application.config_for(:lti_settings)
Créons ltis_controller
et décrivons le contenu suivant
require 'oauth/request_proxy/action_controller_request'
class LtisController < ApplicationController
skip_before_action :verify_authenticity_token, only: :launch
def lti_launch
#La clé de consommateur reçue est config/lti_settings.Vérifiez s'il est en yml
if not Rails.configuration.lti_settings[params[:oauth_consumer_key]]
render :launch_error, status: 401
return
end
shared_secret = Rails.configuration.lti_settings[params[:oauth_consumer_key]]
authenticator = IMS::LTI::Services::MessageAuthenticator.new(request.url, request.request_parameters, shared_secret)
#Check if the signature is valid
if not authenticator.valid_signature?
render :launch_error, status: 401
return
end
#check if the message is too old
if DateTime.strptime(request.request_parameters['oauth_timestamp'],'%s') < 5.minutes.ago
render :launch_error, status: 401
return
end
#Enregistrer les informations LTI dans la session
session_data = {
"fullname" => authenticator&.message&.lis_person_name_full,
"email" => authenticator&.message&.lis_person_contact_email_primary,
"user_id" => authenticator&.message&.user_id,
"context_id" => authenticator&.message&.context_id,
"context_title" => authenticator&.message&.context_title,
"tool_consumer_instance_name" => authenticator&.message&.tool_consumer_instance_name
}
print(session_data)
session['lti-authenticator'] = session_data
sign_in_and_redirect(User.first)
end
end
Vous pouvez facilement vous authentifier en passant la requête envoyée à MessageAuthenticator
et les informations clés conservées ici à l'avance. Si l'authentification réussit, connectez-vous à l'aide de la bibliothèque devise
pour implémenter l'authentification côté application.
Enfin, définissons le point de terminaison pour lancer lti_launch
.
config/routes.rb
match 'lti/launch' => 'ltis#lti_launch', via: [:get, :post], as: :lti_launch
Une fois que cela est fait, la plate-forme d'apprentissage peut écrire les informations d'authentification décrites dans lti_settings.yml
à l'avance et la configurer pour la transition vers le point de terminaison spécifié. Cette méthode diffère selon la plate-forme d'apprentissage individuelle, je vais donc l'omettre.
Ajoutez le contenu suivant à config / application.rb
config/application.rb
config.lti_settings = Rails.application.config_for(:lti_settings)
config.action_dispatch.default_headers['Referrer-Policy'] = 'unsafe-url'
config.action_controller.forgery_protection_origin_check = false
config.action_controller.allow_forgery_protection = false
Rails LTI Tool Provider IMS LTI
Recommended Posts