Es gibt einen Standard namens LTI-Zertifizierung. LTI ist eine Abkürzung für das Wort Learning Tools Interoperability, was einen Standard für den Austausch von Authentifizierungsinformationen zwischen Learning Support Tools bedeutet.
Es ist eine ziemlich Nischentechnologie, die ein bestimmtes Feld unter den Authentifizierungstechnologien hat, so dass viele Leute es möglicherweise nicht wissen. Ich kannte das Wort LTI nicht einmal, bevor ich mich auf Bildungstechnik spezialisierte.
Nachfolgend finden Sie ein erläuterndes Diagramm der von IMS GLOBAL offiziell ausgestellten LTI-Zertifizierung.
Persönlich verstehe ich, dass es sich immerhin um eine Art OAuth handelt, aber die von uns entwickelte Anwendung sind Lernwerkzeuge. Das Hauptwerkzeug für die Authentifizierung ist die Lernplattform, und die Lernwerkzeuge sind eine Erweiterung der Lernplattform. Anstatt es bereitzustellen, erhalten Sie Ihre Anmeldeinformationen von der Lernplattform. Dies hat den Vorteil, dass Benutzer verschiedene Apps ordnungsgemäß verwenden können, ohne den Benutzer zu wechseln. Derzeit wird Learning Tools auch als LTI Tool Provider und Learning Platform auch als LTI Consumer bezeichnet.
Die Frage ist jedoch, wie dies umgesetzt werden kann. Aufgrund seiner Nischentechnologie fehlt ihm die Dokumentation, und selbst wenn Sie im Internet suchen, werden nicht viele Implementierungsbeispiele veröffentlicht. In diesem Artikel möchte ich daher die tatsächliche Praxis der LTI-Authentifizierung mit Ruby on Rails vorstellen.
Installieren Sie zunächst die erforderlichen Bibliotheken.
$ bundle add devise
$ bundle add ims-lti
$ bundle add oauth
Der Vorteil der Verwendung von Rails besteht darin, dass eine Bibliothek für die lti-Authentifizierung vorhanden ist. Dieses Mal werden wir es mit ims-lti
implementieren.
Erstellen Sie eine lti_settings.yml
Datei unter config
.
Bitte beschreiben Sie den folgenden Inhalt (verwenden Sie gegebenenfalls eine sichere Zeichenfolge für den Verbraucherschlüssel und das LTI-Geheimnis).
config/lti_settings.yml
production:
__consumer_key__: '__lti_secret__'
development:
__consumer_key__: '__lti_secret__'
Fügen Sie nach der Erstellung die Einstellungen hinzu, um sie in config / application.rb
zu laden.
config/application.rb
config.lti_settings = Rails.application.config_for(:lti_settings)
Lassen Sie uns ltis_controller
erstellen und den folgenden Inhalt beschreiben
require 'oauth/request_proxy/action_controller_request'
class LtisController < ApplicationController
skip_before_action :verify_authenticity_token, only: :launch
def lti_launch
#Der empfangene Consumer-Schlüssel ist config/lti_settings.Überprüfen Sie, ob es in yml ist
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
#Speichern Sie die LTI-Informationen in der Sitzung
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
Sie können sich einfach authentifizieren, indem Sie die an "MessageAuthenticator" gesendete Anfrage und die hier gespeicherten Schlüsselinformationen im Voraus übergeben. Wenn die Authentifizierung erfolgreich ist, melden Sie sich mit der Bibliothek "devise" an, um die Authentifizierung auf der Anwendungsseite zu implementieren.
Zuletzt definieren wir den Endpunkt zum Starten von "lti_launch".
config/routes.rb
match 'lti/launch' => 'ltis#lti_launch', via: [:get, :post], as: :lti_launch
Sobald dies erledigt ist, müssen Sie lediglich die in lti_settings.yml
beschriebenen Authentifizierungsinformationen vorab auf der Seite der Lernplattform schreiben und auf den Übergang zum angegebenen Endpunkt einstellen. Diese Methode unterscheidet sich je nach Lernplattform, daher werde ich sie weglassen.
Fügen Sie den folgenden Inhalt zu config / application.rb
hinzu
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