Rails에서 LTI 인증

LTI 인증


LTI 인증 규격이 있습니다.
LTI란 Learning Tools Interoperability라는 단어의 이니셜로, 어쨌든 학습 지원 도구 간에 인증 정보를 주고받을 때의 규격을 뜻한다.
인증 기술에서도 영역을 특정했던 상당한 기술이라 모르는 사람도 많죠.나는 교육공학을 전공하기 전에는 LTI라는 단어도 몰랐다.
다음은 IMS GLOBAL 공식 LTI 인증에 대한 설명도입니다.
개인적으로는 최종적으로 OAuth의 일종으로 이해되지만, 우리가 개발한 앱은 Learning Tools로, 인증 기반이 되는 베이스 도구는 Learning Plateform으로, Learning Tools는 Learning Plateform의 확장 기능을 제공하는 것이 아니라 Learning Plateform에서 인증 정보를 받는다.이렇게 되면 사용자는 사용자를 전환하지 않은 상황에서 각양각색의 응용 소프트웨어를 분리해서 사용할 수 있다는 것이 장점이다.이때 Learning Tools는 LTI Tool Provider, Learning Plaatform이라고도 불린다. 다만, 문제는 이것을 어떻게 실시하는가이다.실제로 기술이 엄격하고 문서 관리가 부족하기 때문에 인터넷에서 찾아도 실복을 공개하는 예는 드물다.그럼 이번에는 이 글에서 루비 온 레일스를 이용한 LTI 인증의 실태를 소개하고자 합니다. 설치 예 라이브러리 설치 우선 필요한 프로그램 라이브러리를 설치합니다. $ bundle add devise $ bundle add ims-lti $ bundle add oauth Rails를 사용하는 장점은lti 인증된 프로그램 라이브러리입니다.이번에는 ims-Lti를 사용하여 실시합니다. 인증 키 등록 config 밑에 있는ltisettings.yml 파일을 생성합니다. 내용은 다음과 같이 기재해 주십시오(소비자 키, LTI 기밀은 적당한 안전한 문자열을 사용하십시오). config/lti_settings.yml production: __consumer_key__: '__lti_secret__' development: __consumer_key__: '__lti_secret__' 제작 후 이 설정을 읽기에 사용합니다.rb에 추가합니다. config/application.rb config.lti_settings = Rails.application.config_for(:lti_settings) 컨트롤러 생성 ltis_controller를 만들어서 다음 내용을 기재해 주세요. require 'oauth/request_proxy/action_controller_request' class LtisController < ApplicationController skip_before_action :verify_authenticity_token, only: :launch def lti_launch # 수신된 config/ltisettings.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 #LTI 정보를 세션에 저장 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 Message Authenticator를 통한 요청과 여기에 미리 저장된 키 정보를 전달함으로써 간단하게 인증할 수 있습니다.인증이 성공하면 devise 프로그램 라이브러리 sign을 사용합니다응용 분야에서 인증을 실시하다. 마지막은 티.launch를 시작하는 끝점을 정의합니다. config/routes.rb match 'lti/launch' => 'ltis#lti_launch', via: [:get, :post], as: :lti_launch Learning Plaatform 측면의 설정 이를 할 수 있다면 Learning Plaatform 옆에서 미리 ltisettings.yml에 기재된 인증 정보를 적어서 지정한 노드로 옮기면 완성됩니다.이 방법은 Learning Platform마다 다르기 때문에 생략합니다. (추가) LTI 변환 시 Rails에 cross origin error 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

좋은 웹페이지 즐겨찾기